在 shell 脚本中启动两个无限期运行的脚本

在 shell 脚本中启动两个无限期运行的脚本

我是一名 webdev,我正在使用 JSX 编译器和 SASS 预处理器来编译我的.jsx.scss文件。当我开始工作时,我会启动这两个单独的命令:

jsx -x jsx jsx js --watch --no-cache-dir
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch

如您所见,两者都有一个--watch标志,这意味着它们将继续跟踪各自的文件,直到它们被终止。我希望能够使用一个 shell 脚本,该脚本可以同时启动这两个脚本。到目前为止,我已经:

#!/bin/sh

echo "Starting JSX Compiler..."
jsx -x jsx jsx js --watch --no-cache-dir
echo "Starting SASS Preprocessor"
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch

但这只会执行第一个程序jsx,而不是sass因为 jsx 正在运行。我如何通过 shellscript 启动这两个“监视”类型的程序?

答案1

这里有两种可能性可以实现您的目标。

首先,您只需在命令行末尾添加一个与号“&”即可在后台启动第一个命令:

#!/bin/sh 
echo "Starting JSX Compiler..."
jsx -x jsx jsx js --watch --no-cache-dir &
echo "Starting SASS Preprocessor" 
sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch &

通过这样做,您可以使用同一个终端进行工作,也许 sdtout 和 stderr 的输出将显示在终端中,这有时会有点令人困惑。但进程将在后台运行,直到您关闭终端。

如果这还不够,并且您希望即使终端关闭也能运行进程,那么您还需要nohup此处的命令:

#!/bin/sh 
echo "Starting JSX Compiler..."
nohup jsx -x jsx jsx js --watch --no-cache-dir &
echo "Starting SASS Preprocessor" 
nohup sass stylesheets/scss/app.scss:stylesheets/css/app.css --watch &

这也将启动后台进程,您仍然在命令末尾使用“&”符号,但它还会告诉您的进程忽略 HUP 信号。这样,进程将一直运行,直到程序终止、进程被终止或系统关闭。

相关内容