我编写了一个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。但是当在另一台计算机上执行相同操作时,脚本不遵循此顺序。它只是并排打开所有终端而不是等待一个完成并一起显示对话。这是为什么这个问题?提前谢谢。
答案 0 :(得分: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
答案 1 :(得分:0)
像这样运行它们:
gnome-terminal -e "sh one.sh" ; zenity --info --text "exed one" ; gnome-terminal -e "sh 2.sh" ; zenity --info --text "exed 2"
逗号的作用是告诉shell执行第一个命令,等待它完成,然后继续执行下一个命令。否则,您描述的行为是正常的,它会逐行解析这些行,而不会等待任何事情。