21

我想在不终止的情况下运行 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)

无需终止并等待后台命令完成。

有谁知道该怎么做?

4

5 回答 5

30

使用hold选项:

xterm -hold -e file.sh

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

于 2012-11-09T06:52:58.203 回答
12

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

xterm -e "cd /etc; bash"

我在Super User上找到了答案。

于 2014-05-05T22:56:45.913 回答
7

使用wait内置的 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:~$ 
于 2012-06-01T06:47:26.857 回答
4

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

xterm -e "cd /etc; $SHELL"
于 2017-02-07T22:46:27.427 回答
1

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

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

<"do stuff while xterm is still running">

wait $PID

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

于 2021-02-06T23:37:05.463 回答