我有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结合使用但没有成功。
答案 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
命令来检查调用它的脚本。