Bash 运行xterm-e而不终止
我想在不终止的情况下运行xterm-e file.sh 在这个文件中,我将命令发送到后台,当脚本完成时,它们仍然没有完成 我目前正在做的是:Bash 运行xterm-e而不终止,bash,execute,terminate,xterm,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) 不终止,并等待后台命令完成 有
(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)
不终止,并等待后台命令完成
有人知道怎么做吗?使用内置的shell脚本。它将等待所有后台作业完成 工作示例:
#!/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:~$
使用
hold
选项:
xterm -hold -e file.sh
-hold打开hold资源,即当shell命令完成时,xterm不会立即销毁其窗口。它将等待
直到您使用窗口管理器销毁/杀死窗口,或者
使用发送信号的菜单项,例如HUP或KILL
我尝试了-hold,但它使xterm处于无响应状态,需要通过非标准方式(窗口管理器,kill命令)关闭。如果希望有一个可以退出的开放shell,请尝试将该shell添加到命令末尾:
xterm -e "cd /etc; bash"
我在上找到了答案。基于previoius的答案,如果指定$SHELL而不是bash,它将使用用户首选的SHELL
xterm -e "cd /etc; $SHELL"
关于创建单独的shell,您可能希望在后台运行它,以便可以在当前shell中继续执行更多命令,而不依赖于单独的shell。在这种情况下,只需添加
和操作符:
xterm -e "cd /etc; bash" &
PID=$!
<"do stuff while xterm is still running">
wait $PID
xterm-e“cd/etc;bash”&
PID=$!
等等,$PID
最后的wait
命令将阻止主shell退出,直到xterm shell退出。如果没有等待
,即使在主shell退出后,xterm shell仍将继续运行。不要对命令进行后台处理。这是一个选项吗?不,我正在一起运行一些。我可以建议您将GNUscreen
作为终端管理器而不是使用图形终端管理器吗?看看www.gnu.org/s/screen/。包可用于所有风格的linux(在其默认包repos中)。然后,您可以将屏幕连接到您选择的终端管理器。这不是你正在寻找的解决方案,但从长远来看,这是一个更好的选择。下次我会记住这一点,我离完成一个大项目只有一步之遥:)同时探索wait
shell内置。它使用&
等待并报告发送到后台的命令。您需要在脚本末尾使用。在所有后台作业完成之前,它将阻止脚本终止。tnx,wait${!},解决了问题,它将一直等到后台的最后一个作业结束wait
,而不使用${!}
等待所有作业。但是wait${!}
等待最后一个后台PID。如果最后一个作业在旧作业之前终止,则即使旧作业已终止,您也将退出running@jarhead如果解决了您的问题,请接受答案:)