您可以使用。exec ./your-script
当其中运行的初始进程(通常是外壳程序)退出时,像GNOME Terminal这样的终端模拟器就会退出。
如果您已经在终端中,并且退出该终端之前唯一要做的就是运行特定的脚本(或程序),那么这意味着您不再需要真正在其中运行的shell。因此,您可以使用Shell的exec
内置函数使Shell 用命令创建的进程替换自身。
- 就您的脚本而言,这是另一个Shell进程-就像运行不带的脚本时如何创建第二个 Shell进程一样
exec
。
语法例如是。exec command
exec ./your-script
exec
: 一个例子
例如,假设我有一个名为的shell脚本count
,标记为可执行文件,并且位于当前目录中。它包含了:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
并且,在终端中,我运行:
exec ./count
此打印的标记5
,4
,3
,2
,和1
,每秒一个,然后该终端窗口关闭。
如果您从终端上运行的第一个进程之外的其他东西运行它(例如,如果您bash
首先运行以启动另一个Shell实例),那么这会将您带回到创建该进程的Shell ,而不是退出终端。(此警告同样适用于exit
基于方法的方法。)
您可以使用。./your-script; exit
如果您不想告诉您的shell用新进程替换自己(通过exec
),则可以告诉它继续存在,但是在新进程完成后立即退出。
为此,请运行命令,然后将exit
命令分隔开,;
以便可以在一行上给出它们。
语法command; exit
例如是。./your-script; exit
command; exit
与 command && exit
您可能会注意到这看起来类似的建议方法科斯的和heemayl的答案。区别在于:./your-script && exit
&&
仅当第一个命令通过返回退出代码零来成功执行第二个命令时,才运行第二个命令。
;
不管第一个命令是否报告成功,都运行第二个命令。
您想要哪一个取决于具体情况。如果命令失败,您是否要使调用外壳程序(和托管终端)保持正常运行?如果是这样,请使用&&
; 如果没有,请使用;
。
还有一个command || exit
,只有在command
报告失败时才退出调用Shell 。