确定将输出通过管道传输到另一个脚本的脚本

Determination of a script piping an output into another script

我有 2 个脚本。脚本 a.sh 将输出管道输出到脚本 b.sh,按如下方式处理输出:

$ cat a.sh
#!/bin/bash
echo output | ./b.sh  ### piping into STDIN of b.sh script
$
$ cat b.sh
#!/bin/bash
grep output ### reading from STDIN
$
$ ./a.sh
output

有什么方法可以在脚本 b.sh 中确定它是从哪个脚本获取输入的?我想要 b.sh 脚本来找出它是 a.sh。我尝试将 /proc/$$/fd 的内容与 lsof 结合使用,但没有成功。

这可能是一个愚蠢的解决方案,但您可以使用 ps 找到父进程,而不是使用 ps 再次从该进程获取命令。

例如,将此添加到您在上面给出的 b.sh 中:

ps -p $(ps -o ppid= -p $$) -o cmd=

从 a.sh 脚本调用时的输出是:

/bin/bash ./a.sh

直接从命令行调用时:

-bash

我想您可以使用 /proc/$$ 文件夹来实现相同的目的,在 /proc/$$ 中查找获取 parentPid 并读取 /proc/$(parentPid)/cmdline 以获得相同的结果.

所以这样你会做这样的事情:

parentPid=$(cat /proc/$$/stat | awk '{print }')
cat /proc/$(parentPid)/cmdline

从 a.sh 调用 b.sh 时的输出:

/bin/bash./a.sh

您可以使用带有 PPID 选项的 ps 命令,或 caller 命令来检查哪个脚本调用了它。