运行xterm -e而不终止

jar*_*ead 14 bash execute xterm terminate

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

在文件中,我将命令发送到后台,当脚本完成后,它们仍然没有完成.

我目前正在做的是:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000) 
Run Code Online (Sandbox Code Playgroud)

然后窗口弹出后

sh file.sh
exit
Run Code Online (Sandbox Code Playgroud)

我想做的是:

(cd /myfolder; /xterm -ls -geometry 115x65 -sb -sl 1000 -e sh file.sh)
Run Code Online (Sandbox Code Playgroud)

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

谁知道怎么做?

imw*_*nxu 23

使用hold选项:

xterm -hold -e file.sh
Run Code Online (Sandbox Code Playgroud)

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


小智 12

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

xterm -e "cd /etc; bash"
Run Code Online (Sandbox Code Playgroud)

我在Super User上找到了答案.


小智 6

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

xterm -e "cd /etc; $SHELL"
Run Code Online (Sandbox Code Playgroud)


Sam*_*een 5

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

工作示例:

#!/bin/bash
# Script to show usage of wait
sleep 20 &
sleep 20 &
sleep 20 &
sleep 20 &
sleep 20 &
wait
Run Code Online (Sandbox Code Playgroud)

输出

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:~$ 
Run Code Online (Sandbox Code Playgroud)

  • 没有`$ {!}`的`wait`等待所有作业。但是`wait $ {!}`等待最后的后台PID。如果最后一个作业在较旧的作业之前终止,即使较旧的作业正在运行,您也将退出 (3认同)