Bash 运行xterm-e而不终止

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) 不终止,并等待后台命令完成 有

我想在不终止的情况下运行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)
不终止,并等待后台命令完成


有人知道怎么做吗?

使用内置的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仍将继续运行。

不要对命令进行后台处理。这是一个选项吗?不,我正在一起运行一些。我可以建议您将GNU
screen
作为终端管理器而不是使用图形终端管理器吗?看看www.gnu.org/s/screen/。包可用于所有风格的linux(在其默认包repos中)。然后,您可以将屏幕连接到您选择的终端管理器。这不是你正在寻找的解决方案,但从长远来看,这是一个更好的选择。下次我会记住这一点,我离完成一个大项目只有一步之遥:)同时探索
wait
shell内置。它使用
&
等待并报告发送到后台的命令。您需要在脚本末尾使用。在所有后台作业完成之前,它将阻止脚本终止。tnx,wait${!},解决了问题,它将一直等到后台的最后一个作业结束
wait
,而不使用
${!}
等待所有作业。但是
wait${!}
等待最后一个后台PID。如果最后一个作业在旧作业之前终止,则即使旧作业已终止,您也将退出running@jarhead如果解决了您的问题,请接受答案:)