sh bash脚本使用单引号模糊重定向文件的pid

sh bash脚本使用单引号模糊重定向文件的pid

我的 .sh 文件中有以下新行

su --session-command='$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile' $serviceUser || return 1

当我使用双引号时,它有点起作用,但 pidFile 有错误的 pid,它偏离了一个。研究的解决方案是使用单引号,但我无法让单引号起作用。

我现在得到 2 个错误

bash:$pidFile:模糊重定向
bash:$serviceLogFile:模糊重定向

似乎我不能使用变量或将变量输出到单引号中的变量?

这行代码几乎可以工作,但是 pid 偏离了一个。
下面这段代码将从启动时开始,但是 pid 是错误的。

su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

必须替换这个有缺陷的旧两行代码。

cmd="nohup $javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile"
# Don't forget to add -H so the HOME environment variable will be set correctly.
sudo -u $serviceUser -H $SHELL -c "$cmd" || return 1

旧代码运行良好,但无法从启动时启动。

答案1

&进程 ID 少了一个,因为您在 后面多加了一个$javaCommandLine。换句话说,您在调用 之前已经在后台放置了两个进程echo $!,因此获取的是 PID,>>$serviceLogFile 2>&1而不是$javaCommandLine。这两部分应该放在一个中,如旧的 2 行代码所示

 su --session-command="$javaCommandLine & >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

您可能需要将其更改为 -

 su --session-command="$javaCommandLine >>$serviceLogFile 2>&1 & echo \$! >$pidFile" $serviceUser || return 1

相关内容