如何将 PID 保存到 bash -c 中的变量?

How to save PID to variable in bash -c?

我在使用 bash -c 时无法将 PID 保存到变量中。例如:

bash -c "PID=$$; echo $PID"

在这种情况下,输出为空。如何在变量 PID

中保存子 PID(双引号内命令的 PID)

只需使用简单的引号,否则您的表达式将在当前命令行中计算(过早),而不是在子 bash 命令中计算,并且 PID 目前尚未定义并且你实际上通过了

bash -c "PID=4353; echo"

(其中 4353 是当前 bash 进程的 pid)

有人说不清楚是传父pid还是传子pid

传递父pid,这样修改(只有双引号内的部分在before调用bash子进程时计算):

bash -c "PID=$$; "'echo $PID'

传递子 pid,像这样修复它(在当前 shell 中没有计算任何东西,同样的技巧用于 awk 脚本):

bash -c 'PID=$$; echo $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