我试图从 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 是不同的。