0

我编写了一个 shell 脚本,它在一个新的终端窗口中调用其他一些 shell 脚本。它在我的电脑上运行良好。就像这样

#!/bin/sh
gnome-terminal -e "sh one.sh"
zenity --info --text "exed one"
gnome-terminal -e "sh 2.sh"
zenity --info --text "exed 2"
firefox "www.aurl1.com" "www.aurl2.com"

据我了解,该脚本将首先打开一个终端并运行第一个脚本,完成后它将显示zenity然后在新终端中运行两个然后显示zenity。但是当在另一台计算机上执行相同的操作时,脚本不遵循此顺序。它只是并排打开所有终端,而不是等待一个完成并一起显示对话。为什么会出现这个问题?提前致谢。

4

2 回答 2

1

过去它gnome-terminal会在自己的进程中运行每个终端。但是现在gnome-terminal在启动时检查是否已经有一个gnome-terminal进程正在运行,如果是,则告诉现有的终端进程使用给定的参数打开一个新窗口。您的脚本没有问题:它正在等待每个进程依次完成,只是gnome-terminal在将其工作传递给另一个进程后立即退出。

根据man gnome-terminal,您可以使用该--disable-factory选项禁用此行为,并在其自己的进程中运行每个命令。

尝试这个:

gnome-terminal --disable-factory -e 'sh -c "echo hi && sleep 10"'
echo now you can run script 2
于 2012-11-12T18:57:51.610 回答
0

像这样运行它们:

gnome-terminal -e "sh one.sh" ; zenity --info --text "exed one" ; gnome-terminal -e "sh 2.sh" ; zenity --info --text "exed 2"

逗号的作用是告诉 shell 执行第一个命令,等待它完成,然后才继续执行下一个命令。否则,您描述的行为是正常的,它会逐行解析,而无需等待任何内容。

于 2012-06-06T03:33:16.260 回答