如何获取在EOF块中执行的最后一个命令的PID [duplicate]

How to get PID of last command executed inside EOF block [duplicate]

提问人:Pavel 提问时间:5/5/2023 最后编辑:OuroborusPavel 更新时间:5/5/2023 访问量:32

问:

我正在尝试在EOF块内执行命令的PID。

$ bash << EOF

> sleep 10 &
> pid1=$!
>
> sleep 10 &
> pid2=$!
>
> echo "ID1: $pid1 --- ID2: $pid2"
> EOF

在这种情况下,带有 pid 的变量为空。

ID1:  --- ID2: 

有没有办法为这种情况获取 pids?

Linux Bash EOF

评论


答:

2赞 KamilCuk 5/5/2023 #1

此处的文档内容由您键入字符的 shell 展开。通过转义或引用 here-document 分隔符来防止父 shell 的扩展。

$ bash <<EOF
sleep 10 &
pid1=\$!
sleep 10 &
pid2=\$!
echo "ID1: \$pid1 --- ID2: \$pid2"
EOF

$ bash <<'EOF'
sleep 10 &
pid1=$!
sleep 10 &
pid2=$!
echo "ID1: $pid1 --- ID2: $pid2"
EOF