运行xterm -e而不终止

时间:2012-06-01 06:21:33

标签: bash execute terminate xterm

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

在文件中,我正在向后台发送命令,当脚本完成后,它们仍然没有完成。

我目前正在做的是:

(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)

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

任何人都知道怎么做?

5 个答案:

答案 0 :(得分:23)

使用hold选项:

xterm -hold -e file.sh
  

-hold打开保留资源,即,当shell命令完成时,xterm不会立即销毁其窗口。它会等待   直到你使用窗口管理器来销毁/杀死窗口,或者如果你   使用发送信号的菜单条目,例如HUP或KILL。

答案 1 :(得分:12)

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

xterm -e "cd /etc; bash"

我在Super User上看到了答案。

答案 2 :(得分:5)

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

工作示例:

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

输出

sgulati@maverick:~$ bash test.sh
[1]   Done                    sleep 20
[2]   Done                    sleep 20
[3]   Done                    sleep 20
[4]-  Done                    sleep 20
[5]+  Done                    sleep 20
sgulati@maverick:~$ 

答案 3 :(得分:4)

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

xterm -e "cd /etc; $SHELL"

答案 4 :(得分:1)

关于创建单独的 shell,您可能希望在后台运行它,以便您可以继续在当前 shell 中执行更多命令 - 独立于单独的命令。在这种情况下,只需添加 & 运算符:

xterm -e "cd /etc; bash" &
PID=$!

<"do stuff while xterm is still running">

wait $PID

最后的 wait 命令将阻止您的主 shell 退出,直到 xterm shell 退出。如果没有 wait,即使在主 shell 退出后,您的 xterm shell 仍将继续运行。