如何在不关闭终端的情况下运行脚本?


69

我在文件中有一个脚本bla.sh,它是可执行的。当我单击它时,将执行脚本并关闭窗口。我希望窗户保持打开状态

类似于cmd /k** commandWindows中的命令。

PS我希望使用pause的,但我希望能够在执行脚本之后写多个命令。

Answers:


81

放在$SHELL脚本的末尾:

替代文字

一个小缺陷:由于gnome-terminal未运行bash外壳程序,因此将其视为应用程序,并在您尝试关闭终端时显示警告

There is still a process running in this terminal
Closing the terminal will kill it.

我找不到隐藏此警告的好方法。如果需要,可以通过运行以下命令完全禁用它:

gconftool --set /apps/gnome-terminal/global/confirm_window_close --type boolean false

如果您使用的xterm不是gnome-terminal,则不会发生这种情况;应该打扰你。


20
您可以使用exec $SHELL而不只是$SHELL使警告消失而不更改设置。
Andrea Corbellini 2013年

1
但是此解决方案会创建一个额外的shell /进程。可以避免吗?
lucasvc

我不知道这样做的方法,不。问题在于,一旦第一个bash进程完成,您就失去了对标准IO的控制,因此您将不得不对传递这些处理的守护程序进行一些欺骗,这将更容易出错和烦人。
Stefano Palazzo

10

使用Gnome终端

在命令字符串的末尾使用gnome-terminal附加; bash并使用-c选项调用脚本即可。例如:

gnome-terminal -e "bash -c ~/script.sh;bash"

这将执行以下操作:

  1. 打开gnome终端
  2. 执行脚本script.sh
  3. 脚本完成后显示bash提示。

您可以通过关闭窗口来退出gnome-terminal窗口,或者在bash提示符下键入exit。或者,您可以根据要求键入更多命令。



7

如果您有权访问脚本,则还可以在末尾添加以下代码:

read

该代码将在关闭之前等待输入,因此终端将保持打开状态,直到您按Enter键为止。


1
我经常bash在末尾使用,但read允许我仅使用ctrl+cor enter而不是ctrl+shift+wor 来关闭窗口alt+f4。在脚本上快速迭代时,这很方便。
hsandt

5

对临时管道使用bash--init-file选项:

bash --init-file <(echo './<script_name>')

例如:

bash --init-file <(echo './bla.sh')

2

在命令字符串的末尾使用xterm和附加;bash有效。例如:

xterm -e "bash ~/script.sh;bash"

这将执行以下操作:

  1. 打开xterm
  2. 执行脚本 script.sh
  3. 脚本完成后显示bash提示。

您可以通过关闭xterm窗口或exit在bash提示符下键入来退出xterm窗口。或者,您可以根据要求键入更多命令。


1
xterm -e bash --rcfile bla.sh

这将在新窗口中运行脚本,甚至在完成后还可以控制该窗口。

但是,新窗口不会~/.bashrc正常加载,因为我们已经运行了bla.sh。这可以通过将

. ~/.bashrc

在顶部 bla.sh

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.