从终端运行多个 gui 程序而不否认它们

Kar*_*Mtl 7 command-line bash process

我制作了一个非常简单(但对我有用)的 bash 脚本。它所做的只是打开一些我手动打开的应用程序。这是代码:

#!/bin/bash
netbeans &
mysql-workbench &
opera &
chromium-browser &
Run Code Online (Sandbox Code Playgroud)

现在,当我关闭终端时,脚本打开的应用程序继续运行。这是正常的,这就是“&”的用途。

我的问题是:有没有办法仍然自动运行这些应用程序,但也自动关闭它们?如果它们仍然连接到终端,它们将关闭,但是当我删除&符号时,它只运行第一个应用程序。

谢谢

mur*_*uru 5

您必须获取脚本的源代码,以便在您当前的 shell 中执行这些命令,而不是在为脚本启动的分叉 shell 中执行:

. ./foo.sh
Run Code Online (Sandbox Code Playgroud)

然后,这些后台进程将成为您的 shell 作业控制的一部分。

使用函数可能更容易。例如,在您的 bashrc 中,添加:

foo () {
    netbeans &
    mysql-workbench &
    opera &
    chromium-browser &
}
Run Code Online (Sandbox Code Playgroud)

然后,当您foo从 bash运行时,它将运行您当前 shell 中的命令。


Geo*_*sen 5

这两个函数可以从你的.bashrc文件中使用来启动和关闭它们,只需用lapp和调用它们kapp

lapp(){
     netbeans &
     mysql-workbench &
     opera &
     chromium-browser &
}

kapp() {
    pkill 'netbeans|mysql-workbench|opera|chromium-browser'
}

#Or

kapp() {
    killall 'netbeans|mysql-workbench|opera|chromium-browser'
}
Run Code Online (Sandbox Code Playgroud)

信息:

  • source .bashrc添加这些功能后记得运行

(来源:man pkill