2012-06-01 69 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"