如何将 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
我在使用 bash -c
时无法将 PID 保存到变量中。例如:
bash -c "PID=$$; echo $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