2012-06-01 29 views
8

我想运行xterm -e file.sh而不终止。运行xterm -e而不终止

在文件中,我向后台发送命令,当脚本完成时,它们仍未完成。

我在做什么目前是:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000) 

,然后在窗口弹出后

sh file.sh 
exit 

我想要做的是一样的东西:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000 -e sh file.sh) 

无终止并等到后台的命令完成。

任何人都知道该怎么做?

+1

不要背景你的命令。这是一个选择吗? –

+0

不,我一起跑几次 – jarhead

+1

我可以建议你把GNU'screen'作为终端管理器而不是使用图形终端管理器吗?看看www.gnu.org/s/screen/。软件包可用于所有类型的linux(在其默认软件包仓库中)。然后,您可以将屏幕连接到您选择的终端管理器。不是您正在寻找的解决方案,而是从长远来看更好的选择。 – Samveen

回答

1

使用您的shell脚本中内置的wait。它会等到所有后台作业完成。

工作实例:

#!/bin/bash 
# Script to show usage of wait 
sleep 20 & 
sleep 20 & 
sleep 20 & 
sleep 20 & 
sleep 20 & 
wait 

输出

[email protected]:~$ bash test.sh 
[1] Done     sleep 20 
[2] Done     sleep 20 
[3] Done     sleep 20 
[4]- Done     sleep 20 
[5]+ Done     sleep 20 
[email protected]:~$ 
+0

tnx,等待$ {!},解决了问题,它等到后台的最后一个作业 – jarhead

+2

'wait'没有'$ {!}'等待所有作业。然而'wait $ {!}'等待最后一个背景PID。如果最后的工作在较旧的工作之前终止,即使较旧的工作正在运行,您也将退出 – Samveen

+0

您的权利,再次tnx .. – jarhead

14

使用hold选项:

xterm -hold -e file.sh 

-hold打开保持资源,即xterm中不会马上当壳牌公司销毁它的窗户时完成。它将等待 ,直到您使用窗口管理器销毁/终止该窗口,或者您使用发送信号的菜单条目(例如HUP或KILL)。

6

我试过了,它让xterm处于无响应状态,需要通过非标准方式关闭(窗口管理器,kill命令)。如果你宁愿有一个开放的shell,您可以退出,尝试添加该外壳到命令的末尾:

xterm -e "cd /etc; bash" 

我通过这个答案来了Super User

+0

这会更好! – Abhinav

0

基于previoius答案构建,如果您指定$ SHELL而不是bash,它将使用用户首选的shell。

xterm -e "cd /etc; $SHELL"