sh bash腳本使用單引號模糊重定向檔案的pid

sh bash腳本使用單引號模糊重定向檔案的pid

我的 .sh 檔案中有以下新行

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

當我用雙引號括起來時,它有點工作,但 pidFile 的 pid 錯誤,它減少了 1。研究的解決方案是使用單引號,但我無法讓單引號運作。

我現在收到 2 個錯誤

bash: $pidFile: 不明確的重定向
bas​​h: $serviceLogFile: 不明確的重定向

似乎我不能使用變數或輸出到單引號中的變數?

這一行幾乎可以工作,但 pid 關閉了 1
下面的程式碼將從啟動開始,但 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

相關內容