我试图从 bash 脚本中获取最后执行的命令的进程 ID。通常我会这样做:
$ nohup ./test > nhout &
nohup: redirecting stderr to stdout
$ echo $!
3006196 #This is the PID
我正在尝试在 shell 脚本中执行完全相同的操作。
#!/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