在 grep 语句中使用 $BASHPID

在 grep 语句中使用 $BASHPID

我试图从 pgrep 返回的结果中排除子 shell 的 PID。请注意,该文件的名称与传递给 pgrep 的名称相同。为什么设置等于 BASHPID 的变量允许“grep -v”在下面工作?我正在使用 Bash 4.1.2。

myprocess.sh

#!/bin/bash

# === Fails ===
pids=$(pgrep -f myprocess | grep -v ${BASHPID} | grep -v $$)
echo "$pids"

echo "-------"

# === Works ===
pids=$(bashpid=${BASHPID}; pgrep -f myprocess | grep -v ${bashpid} | grep -v $$)
echo "$pids"

答案1

管道右侧的命令在子 shell 中运行 - 因此,它们的 $BASHPID 是不同的。

相关内容