首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Shell脚本语句没有一个接一个地运行

Shell脚本语句没有一个接一个地运行
EN

Stack Overflow用户
提问于 2012-06-01 13:55:50
回答 2查看 653关注 0票数 0

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

代码语言:javascript
复制
#!/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。但是,当在另一台计算机上执行相同的命令时,脚本不会遵循此顺序。它只是并排打开所有终端,而不是等待一个终端完成,并一起显示对话。为什么会出现这个问题?提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2012-11-13 02:57:52

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

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

试试这个:

代码语言:javascript
复制
gnome-terminal --disable-factory -e 'sh -c "echo hi && sleep 10"'
echo now you can run script 2
票数 1
EN

Stack Overflow用户

发布于 2012-06-06 11:33:16

像这样运行它们:

代码语言:javascript
复制
gnome-terminal -e "sh one.sh" ; zenity --info --text "exed one" ; gnome-terminal -e "sh 2.sh" ; zenity --info --text "exed 2"

逗号所做的是告诉shell执行第一个命令,等待它完成,然后才继续执行下一个命令。否则,您描述的行为是正常的,它会逐个解析行,而不等待任何东西。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10845117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档