linux - Shell 脚本语句不能一一运行

标签 linux shell gnome-terminal zenity

我编写了一个 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。但是当在另一台计算机上执行相同的操作时,脚本不遵循此顺序。它只是并排打开所有终端,而不是等待一个终端完成并一起显示对话。为什么会出现这个问题?提前致谢。

最佳答案

过去,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

关于linux - Shell 脚本语句不能一一运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10845117/

相关文章:

linux - 知道 OCaml IDE 吗?

linux - 如何在 Linux 中安装适用于 Java 7 的 DCEVM?

python - 如何制作一个始终在 Linux 终端中运行的脚本?

linux - 防止 Gnome 终端在执行后退出

PHP - 如何让 Shell 错误回显到屏幕上

c++ - 终端不显示程序的警告...如何在终端中查看它们?

python - 在/accounts/login/配置不当

c - 多处理器系统上的线程

linux - 如何在 UNIX 中使用 GREP 移动特定日期的文件

node.js - 使用nodejs像伪终端一样启动bash