我在使用bash -c
時將PID保存到變量中時遇到問題。例如:如何將PID保存到bash -c中的變量?
bash -c "PID=$$; echo $PID"
在這種情況下,輸出爲空。如何在變量中保存現在變量中的子PID(變量內的命令的PID)PID
我在使用bash -c
時將PID保存到變量中時遇到問題。例如:如何將PID保存到bash -c中的變量?
bash -c "PID=$$; echo $PID"
在這種情況下,輸出爲空。如何在變量中保存現在變量中的子PID(變量內的命令的PID)PID
set -x
對調試有用,會告訴你,到頭來前綴+
實際的命令:
$ set -x
$ bash -c "PID=$$; echo $PID"
+ bash -c 'PID=1900; echo '
事實上,在該命令中,您會期望空輸出。發生這種情況是因爲$$
和$PID
被替換爲之前bash
被調用。
爲了避免這種情況,你可以單引號的字符串或難逃「$」符號:
$ set -x
$ bash -c 'PID=$$; echo $PID'
+ bash -c 'PID=$$; echo $PID'
1925
$ bash -c "PID=\$\$; echo \$PID"
+ bash -c 'PID=$$; echo $PID'
1929
感謝與'set -x'的提示 – 1072
只是使用簡單的引號,或者表達式在當前命令行中(太快)而不是在子bash中命令,PID
還沒有在這個時刻定義,你實際上是通過
bash -c "PID=4353; echo"
(其中4353是當前bash進程的PID)
有人指出,目前還不清楚,如果你想通過家長pid或孩子pid
通過父PID,解決這個問題是這樣的(只有雙引號內的部分評估之前調用bash的子進程):
bash -c "PID=$$; "'echo $PID'
通過孩子PID,解決它像這樣(沒有進行評估在當前shell,用於awk
腳本)同樣的伎倆:
bash -c 'PID=$$; echo $PID'
OP是否應該採用父bash shell的PID還是新啓動的bash shell有點不清楚。 +1表示兩種選擇! – hetepeperfan
什麼時候我必須在child-command中使用簡單的引號? – 1072
@hetepeperfan再次XY問題!我在答案中增加了兩種可能性。也許「通過父母」是最有用的。沒有必要將自己的進程ID傳遞給子進程。 –
你說的是哪PID?你當前正在運行的bash shell的PID,或者你正在啓動的shell? – hetepeperfan
@hetepeperfan雙引號內的子命令的PID。 – 1072
你能否在你的問題中明確說明,以便將來的讀者,充分利用你的問題 – hetepeperfan