如何从 bash (Linux) 打开应用程序

问题描述 投票:0回答:4

尽可能自动化您生活的一部分! (它似乎无法正常工作......)。这次是在我早上煮咖啡时打开桌面上的多个应用程序。

我创建了一个 .sh 来打开我的工作区应用程序,例如 Visual Code、Slack、Firefox 等。

脚本基本上是:

exec code
exec /usr/local/firefox_dev/firefox
exec snap/slack/39/usr/bin/slack
exec /snap/spotify/current/usr/share/spotify/spotify

我基本上找到了可执行应用程序的路径,并将 exec 放在它们前面...是的,我

chmod +x ./workspace-apps-script.sh
使其可执行。

问题是:无论我把哪一行放在前面,它都只执行第一行。我希望他们一张一张地打开,直到最后一张。

linux bash sh
4个回答
5
投票

问题是您的应用程序在启动时不会返回。 所以你必须让它们进入背景分离

要在后台执行命令,您只需在脚本中的命令行末尾添加

&
即可。 例如:

#!/bin/bash

code &
/usr/local/firefox_dev/firefox &
snap/slack/39/usr/bin/slack &
/snap/spotify/current/usr/share/spotify/spotify &

如果要在分离模式下执行命令,可以在命令行开头使用

nohup
。例如:

#!/bin/bash

nohup code
nohup /usr/local/firefox_dev/firefox
nohup snap/slack/39/usr/bin/slack
nohup /snap/spotify/current/usr/share/spotify/spotify

我建议您结合使用两种模式以获得最佳效果。所以你可以在你的脚本中执行此操作:

#!/bin/bash

nohup code &
nohup /usr/local/firefox_dev/firefox &
nohup snap/slack/39/usr/bin/slack &
nohup /snap/spotify/current/usr/share/spotify/spotify &

但是,如果您想在每次登录电脑时执行此操作,您可以直接在您的

.bashrc
文件中写入 abobe 行,该文件位于您的主目录中,并在每次登录时执行。


1
投票

从开头删除

exec
(直接调用程序即可):

#!/bin/bash

code
/usr/local/firefox_dev/firefox
snap/slack/39/usr/bin/slack
/snap/spotify/current/usr/share/spotify/spotify

您可以随时使用

shellcheck -s bash <your-script-path>
来查看是否有错误。


0
投票

如果您一般不熟悉 bash 和 shell 脚本,那么

exec
并不是您想象的那样。它不是用于执行程序。
exec
是一个 shell 内置命令,它用传递给 exec 的程序替换当前正在执行的进程(在本例中为 shell)。

因此,

exec /usr/local/firefox_dev/firefox
firefox
程序替换/覆盖您的shell进程,但它不会创建新进程。要了解差异,请参阅以下命令:

$ # At the Command Prompt
$ # To see running processes, call ps
$ ps
PID   TTY         TIME CMD
6017  pts/2   00:00:00 ps
19890 pts/2   00:00:01 bash
$ 
$ exec /usr/local/firefox_dev/firefox # Replaces bash with firefox program and firefox will now have PID of bash which is 19890 in this example

重要的是,由于调用者进程不再存在,因此程序不会将控制权返回给调用者程序(shell)。因此,就您而言,这就是仅第一个程序运行而其余程序不运行的原因。 如果您不使用 exec 调用程序,它将获得一个新的 PID(进程 ID),并且被调用的程序将成为调用者进程(在本例中为 shell)的子进程


0
投票

在 Android 中打开应用程序? (APK)

© www.soinside.com 2019 - 2024. All rights reserved.