标签: dialog

鞭尾或对话

我将创建一个使用用户输入的脚本,所以我决定使用whiptail.

但是现在我有点困惑哪个是可移植的并且可以在 Ubuntu 10.x 及更高版本和 CentOS 5.x 及更高版本上运行。

我知道read,但我想要一个像dialog. 如果有人知道任何替代方案,请告诉我。

bash shell-script whiptail dialog

20
推荐指数
4
解决办法
3万
查看次数

如何保持 netcat 连接打开?

我有两个文件,client.shserver.sh. 所有必要的数据都在服务器上,这些数据使用netcat发送到客户端。客户端只是获取这些数据并将其显示给最终用户。问题是,当我尝试显示从服务器到客户端的对话框加载屏幕时:

服务器文件

# CLIENT PORT: 8765
# SERVER PORT: 5678

while :
do
    touch registered_users data

    nc -vv -l -p 5678 > data

    case `cat data` in
        "SPLASH_SCREEN")
            for ((i=0;i<100;i++))
            do
                echo $i
            done | dialog --title 'Loading...' --gauge 'Welcome!' 8 40 0 > /dev/tcp/127.0.0.1/8765
        ;;
    esac
done
Run Code Online (Sandbox Code Playgroud)

客户端.sh

# CLIENT PORT: 8765
# SERVER PORT: 5678

echo "SPLASH_SCREEN" > /dev/tcp/127.0.0.1/5678

while :
do
    nc -l -p 8765 > server_response
    cat server_response
done
Run Code Online (Sandbox Code Playgroud)

shell-script netcat dialog

8
推荐指数
1
解决办法
2万
查看次数

对话还是zenity?

我正在做一个项目。对于 GUI 部分,我有两个选项。

使用dialogzenity

我以前从未使用过任何这些工具。我必须学习其中之一。建议我应该学习哪个,学习哪个更有益?哪个是旧的,哪个是新的?你会更喜欢哪一个?

gui zenity dialog

5
推荐指数
1
解决办法
3248
查看次数

带有命令输出的 Bash 控制台进度对话框

我已经dialog安装了,我想要一个不错的进度对话框,如下所示:

+-------[ title ]--------+
|                        |
| +-[ console output ]-+ |
| | output line11      ^ |
| | output line12      | |
| | output line13      | |
| | output line14      # |
| | output line15      | |
| | output line16      v |
| +--------------------+ |
| #########80%#####::::: |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

因此,例如,当在发行版中升级 5 个软件包时,它会显示进度(此处,4 个软件包升级了 5 个,即 80%),但会显示执行命令的详细输出。这可能吗?

我怀疑是这样,但我无法通过--tailboxbg和获得有效的解决方案--gauge

bash dialog

5
推荐指数
1
解决办法
7487
查看次数

对话、陷阱和 SIGTRAP

我已经看到了很多使用对话框工具将脚本写入脚本的示例,如下所示:

trap "rm $datafile" 0 1 2 5 15
Run Code Online (Sandbox Code Playgroud)

我不明白的是SIGNAL 5的含义,好吧我知道是SIGTRAP。但我很惭愧,我仍然不明白它的真正意义......

提前致谢!!

bash trap dialog sigtrap

5
推荐指数
1
解决办法
5319
查看次数

如何让我的 bash 脚本看起来 100% 像一个 GUI 应用程序(所以用户永远不会看到终端)

我使用 kdialog 创建了一个 bash 脚本(它在 Kubuntu 12.04 上运行)。GUI 用于每个用户交互(在第一个之后)。但是,脚本仍然必须从终端启动并且终端仍然可见,即使用户不需要读取终端输出或在终端中输入任何内容。有没有一种简单的方法可以进入下一步并使我的 bash 脚本看起来 100% 像 KDE Gui 应用程序?

从下面 slm 和 Ilya Ananyev 的初步回答中,我看到制作 .desktop 文件可以实现这一点。这对我来说非常神奇,这就是我一直在寻找的简单答案。(我想要一个我可以在午餐时间完成的任务,并在剩下的时间里使用我的 bash 脚本来看起来像一个真正的 GUI 应用程序。).desktop 文件对于这个问题的其他读者来说也可能是正确的答案。

但是,在我的特定情况下,该脚本是一个安装程序脚本。所以我发现自己处于第 22 条军规中。如何安装 .desktop 文件以启动我的安装程序,而用户不必先为 .desktop 文件运行另一个安装程序?

此外,就我而言,该脚本由不了解计算机的最终用户使用。最终用户根据我的建议购买了一台预装了 Linux 的计算机。我的目标是让他们无需进入终端即可安装我的软件。(很可能他们以前从未见过命令提示符——他们中的一些人甚至不知道如何使用鼠标!)

所以,看起来,我的解决方案需要一些神奇的方式来安装 .desktop 文件,以便用户可以单击它来启动我的安装程序脚本。

总结一下,我的主要要求是:

  1. 一种在不显示终端的情况下启动脚本的方法。.desktop 文件将完成此操作。
  2. 一种在执行期间保持终端隐藏的方法(因为我完全依赖于 kdialog)。.desktop 文件将通过Terminal=falseset完成此操作。
  3. 可选地,用户输入其 sudo 密码的安全方式。我知道 kdialog 密码输入对话框,但我看到的使用示例并不安全。kdesudo 可能是一个解决方案,但它会多次重新提示输入密码,忽略 X 分钟的通常/默认 sudo 超时。所以它对我不起作用。
  4. 简单到可以在我的午餐时间实施。.desktop 文件将完成此操作。
  5. 在 kdialog 中使用我现有的 bash 脚本。.desktop 文件将完成此操作。
  6. 不需要用户在运行我的脚本之前进行额外的设置步骤。事实证明,KDE 用户可以单击位于任何位置的 …

bash gui kde4 dialog bash-script

4
推荐指数
1
解决办法
2691
查看次数

当我使用对话框/whiptail 调用获取脚本时,Shell 退出

我有以下脚本:

#!/bin/bash

set -e

TITLE="Choose version"
VERSIONS=$(cat <<'END'
AAA
BBB
END
)

VERSION_LIST=$(echo "$VERSIONS" | awk '{print NR, " ", $0}')
INDEX=$(whiptail \
        --no-cancel \
        --menu "$TITLE" 15 40 15 \
        $VERSION_LIST \
        3>&1 1>&2 2>&3)
Run Code Online (Sandbox Code Playgroud)

当我使它可执行并运行它时,它会按预期工作。当我source从 bash 或 zsh调用它时,会发生以下情况之一:

  1. 终端关闭(bash 似乎退出)
  2. 终端保持打开状态,但很快就会崩溃/退出。最简单的复制方法是键入ls somefile并按下TAB以完成。

我正在使用 Fedora 29,我也可以在 Mac OS 上看到这种行为。在源脚本中使用whiptail/dialog 时,是否需要考虑任何特定的考虑因素?

bash shell-script dialog

4
推荐指数
1
解决办法
701
查看次数

第 4 行:$data:使用密码框时的歧义重定向

我想使用对话框包创建一个密码框。

#!/bin/bash
data=$(tempfile 2>/dev/null)
trap "rm -f $data" 0 1 2 5 15
dialog --title "Password" \
--clear \
--passwordbox "Enter your password" 10 30 2> $data

ret=$?

case $ret in
  0)
    echo "Password is $(cat $data)";;
  1)
    echo "Cancel pressed.";;
  255)
    [ -s $data ] &&  cat $data || echo "ESC pressed.";;
esac
Run Code Online (Sandbox Code Playgroud)

但是,当我执行它时出现此错误:

line 4: $data: ambiguous redirect
Run Code Online (Sandbox Code Playgroud)

怎么了?

io-redirection shell-script dialog

3
推荐指数
1
解决办法
2万
查看次数

当通过命令替换表达式启动时,为什么“对话框”不显示菜单(但接受接受)?

我想通过 bash shell 脚本向用户显示可供选择的菜单。然后应将选择存储在环境变量中以供以后进一步使用。

如果我从命令行运行:

dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice"
Run Code Online (Sandbox Code Playgroud)

然后一切正常;我得到了我想要的菜单,choice1或者choice2打印回了我。但是,如果我运行:

SELECTION=$( dialog \
    --backtitle "Make a choice" \
    --menu "Take a pick" \
    10 40 3 \
    choice1 "First choice" \
    choice2 "Second choice" \
)
Run Code Online (Sandbox Code Playgroud)

然后它不再像我想要的那样工作。

  • 不显示菜单,尽管(据我所知)dialog按 Enter 时退出
  • 当我按 Enter 退出未显示的菜单时,选择的标签出现在终端上,而不是存储到 $SELECTION

我尝试添加2>&1将 stderr 重定向到 stdout,以防它真的被打印到 stderr。唯一显着的影响是现在,无论是从命令替换表达式还是打印到终端,都不会返回任何内容。 …

bash dialog

3
推荐指数
1
解决办法
1898
查看次数

dpkg-reconfigure:支持哪些软件包?

dpkg-reconfigure 提供了一种以“用户友好”的方式为已安装包设置选项的方法(例如,不是编辑文件而是从对话框中选择)。

我怎样才能找出哪个包有这样的选项?例如,“ dpkg-reconfigure tzdata”确实有,而“ dpkg-reconfigure nano”没有。

apt-mirror通过dpkg-reconfigure“对话方式”添加额外的正确参数/包是什么?

dpkg user-interface dialog

3
推荐指数
1
解决办法
1373
查看次数