我想运行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)
没有终止并等到后台的命令完成。
任何人都知道怎么做?
答案 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 仍将继续运行。