Centos

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

  • December 23, 2013

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

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

當我使用雙引號時,它有點工作,但是 pidFile 的 pid 錯誤,它被關閉了一個。研究的解決方案是使用單引號,但我無法使用單引號。

我現在得到 2 個錯誤

重擊: $ pidFile: ambiguous redirect bash: $ serviceLogFile:不明確的重定向

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

這一行幾乎可以工作,但 pid 已關閉

下面的程式碼將從啟動開始,但 pid 錯誤。

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

它必須替換這個有問題的舊 2 行程式碼。

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

舊程式碼執行良好,但無法從啟動中啟動。

程序 ID 減一,因為您&$javaCommandLine. 換句話說,您在呼叫 之前已將兩個程序置於後台echo $!,從而獲得了>>$serviceLogFile 2>&1而不是的 PID $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

引用自:https://serverfault.com/questions/563087