确定将输出连接到另一个脚本的脚本

时间:2017-10-02 13:38:41

标签: bash pipe stdin file-descriptor

我有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结合使用但没有成功。

2 个答案:

答案 0 :(得分:0)

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

将此添加到上面给出的b.sh中的示例:

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

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

/bin/bash ./a.sh

直接从命令行调用:

-bash

我想你可以使用/ proc / $$文件夹来实现同样的事情,查看/ proc / $$获取parentPid和read / proc / $(parentPid)/ cmdline来获得相同的结果。< / p>

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

parentPid=$(cat /proc/$$/stat | awk '{print $4}')
cat /proc/$(parentPid)/cmdline
从a.sh调用b.sh时输出

/bin/bash./a.sh

答案 1 :(得分:0)

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