linux - 在另一个进程中运行 bash 脚本

标签 linux bash shell sh raspbian

所以我正在制作一个简单的脚本,加载两个脚本和一个命令,但为了论证,让我们保持简单,而不涉及许多项目的细节。

正如您所知,我在 Raspbian 环境中工作。这是最新版本。如果这很重要的话,我使用的是树莓派 3B+。我的 pi 设置为在控制台中启动,因此我可以立即运行此脚本(通过别名)。

继续,我们里面有三个脚本,比如说originalScript.sh:

~loop.sh

~processStart.sh

~startx(这是特定的,但如果您不知道,这是在树莓派终端((可能还有任何 Linux GUI 系统))中使用的命令,用于启动操作系统的 GUI)

问题。这一命令需要以最终的 startx 命令结束,GUI 才会加载以运行 processStart.sh。问题是,loop.sh 也需要运行,但是当它是第一个或第二个命令时,后面的命令永远不会到达。我会把它放在最后,但是当我启动 startx 时,脚本会在 GUI 加载时被切断(因此需要您打开一个新终端并重新启动带有错误的原始脚本((因为 GUI 已经加载。)))

有没有办法让loop.sh作为一个进程启动或在另一个 session 中打开,而startx则这样做?我已经尝试过

`source ~/loop.sh`

`bash ./loop.sh`

以及脚本中的其他一些内容,但他们做同样的事情;在同一窗口中启动脚本。正如预期的那样,当发生这种情况时,当循环开始时,程序的其余部分不会发生,直到它结束。

如果我无法像这样启动该脚本,从逻辑上讲是否还有另一种方法可以通过一个脚本同时运行它?

预先感谢您的帮助!

最佳答案

在 bash 中,loop.sh 可以通过在命令后附加一个 & 符号来作为后台进程启动。 (即loop.sh &)该命令将在后台运行,脚本的其余部分将继续运行。

请注意,如果 loop.sh 正在执行 startx 之前需要完成的任何操作,则必须向脚本添加额外的逻辑来检查 >startx 已准备好运行。

source Loop.sh 会在当前 shell 中运行 loop.sh,并且直到 loop.sh 退出才会返回。

bash Loop.sh 将启动一个新的 bash 进程并运行 loop.sh。在 bash 进程退出之前,脚本不会继续。

关于linux - 在另一个进程中运行 bash 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54063332/

相关文章:

c - ftw 和流程问题

regex - grep 前一行仅针对一种特定模式

shell - 在 Windows 本地运行 mysqldump 命令

sql-server - 在 Ubuntu 上创建一个 mssql 服务器

linux - -o 在 Linux 终端 (Dash o);这是什么意思?

bash:在命令行参数中添加注释

bash - 如何将 `scp`目录保留结构但只选择某些文件?

linux - ls | grep 变量作为正则表达式

.net - .NET 4.0 的 shell 扩展

java - 如何将数据从bash脚本正确传递到java应用程序