这是一个简化的示例:
脚本1
#!/bin/bash
./script2
脚本2
#!/bin/bash
foo() {
parent_script=$(ps -o comm= $PPID)
echo "Parent script: $parent_script" > log
}
foo &
日志内容(运行 script1 后):
父脚本:
我可以通过将函数设置为非后台函数或获取函数外部的父脚本名称并将其作为参数传递来解决此问题:
脚本2
#!/bin/bash
foo() {
echo "Parent script: $1" > log
}
parent_script=$(ps -o comm= $PPID)
foo "$parent_script" &
日志内容(运行 script1 后):
父脚本:script1
更奇怪的是,如果我只是在原来的行sleep 1
后面添加一个,我也会得到预期的结果:foo &
script2
#!/bin/bash
foo() {
parent_script=$(ps -o comm= $PPID)
echo "Parent script: $parent_script" > log
}
foo &
sleep 1
但是我想知道1)为什么第一个示例不起作用,2)有没有办法从后台函数内部获取父脚本名称?