Bashスクリプトで最後に実行されたコマンドのプロセスIDを取得しようとしています。通常私はこうする:
$ nohup ./test > nhout &
nohup: redirecting stderr to stdout
$ echo $!
3006196 #This is the PID
シェルスクリプトで同じことをしようとしています。
#!/bin/bash
for i in {1..10};do
`nohup ./testscript_${i} > nhout_${i} &`
echo $! >> pid_list.txt
done
ところで確認してみるとpid_list.txt
ファイルが空です。私はこれが$!
コマンドではなく、私が実行したスクリプトを参照している可能性があることを理解していますnohup
。ただし、この問題を解決する方法がわからず、オンラインでリソースが見つかりません。どうやってこれを達成できますか?
答え1
nohup
コマンドの周りに無効なバックティックペアがあります。その結果、nohup
コマンドnohup
は実行されるバックティックの出力を生成するための副作用としてのみ実行されます。
この試み:
#!/bin/bash
for i in {1..10}; do
nohup "./testscript_$i" > "nhout_$i" &
echo "$!" >> pid_list.txt
done