Bash 获取在shell中运行的脚本的pid-$!什么也不给

Bash 获取在shell中运行的脚本的pid-$!什么也不给,bash,Bash,我正在编写一个脚本,它使用包含参数的nohup运行一个程序,因此我将该命令包装成一个shell命令。 我试图得到程序的pid,但遇到了困难。 这就是我试图运行的: nohup bash -c '../command --dir /mnt/raid/test/test.txt "https://www.google.com/" > temp.txt 2>&1 &'; APP_PID=$! | { #APP_PID=$!

我正在编写一个脚本,它使用包含参数的nohup运行一个程序,因此我将该命令包装成一个shell命令。 我试图得到程序的pid,但遇到了困难。 这就是我试图运行的:

nohup bash -c '../command --dir /mnt/raid/test/test.txt  "https://www.google.com/" > temp.txt 2>&1 &'; APP_PID=$! | {
            #APP_PID=$!
            echo "the pid is ${APP_PID}"
}
此脚本的结果显示空pid,如下所示:

the pid is
我尝试了许多变体并搜索了堆栈溢出,但找不到任何相关内容


问题是我做错了什么?

后台进程被创建为外壳的孙子(通过
bash-c
),您将无法从外壳获取孙子的PID。您可以这样做:

nohup bash -c '../command --dir /mnt/raid/test/test.txt  "https://www.google.com/" > temp.txt 2>&1'& APP_PID=$! && {
            echo "the pid is ${APP_PID}"
}

这里,
nohup
在后台运行,您可以得到它的PID。

谢谢!它向我解释了我大部分的困惑。现在唯一的问题是它产生了2个pid,并且只捕获其中一个。以下是ps aux的结果:很抱歉第二条评论。忘记了Enter=submitcomment。以下是我所写的:现在唯一的问题是它产生了2个pid,而这只捕获其中一个。以下是
ps aux
root 32462 0.0 0 0.0 11140 1204 pts/3 S 15:14 0:00../command--dir/mnt/raid/test/test.txt的结果”https://www.google.com/“>temp.txt 2>&1 root 32464 39.2 0.1 81352 33868 pts/3 S 15:14 0:01命令--dir/mnt/raid/test/test.txt”https://www.google.com/"
返回的pid为32462。如何获取另一个pid?在../命令中有什么?是剧本吗?看起来它是在派生一个新进程。如果这个帮助我只需要杀死进程和所有子进程,那么它就是一个python脚本,所以下面的命令可以满足我的需要:
pkill-TERM-P$APP\u PID
。再次感谢!我接受你的回答,因为它回答了这个问题。