获取导出函数的调用者脚本
我有一个脚本/usr/bin/test.sh,它看起来像这样:
test_func()
{
    echo "callertest 1:"
    cat /proc/$PPID/cmdline | tr ' ' ' '
    echo "callertest 2:"
    ps aux | grep $PPID
}
export -f test_func
bash -c test_func
因为“/ usr / bin”在$ PATH中,所以我用“test.sh”调用脚本。 该函数应该回应脚本的名称或更好的完整路径,但我没有比获得“bash”更多。 似乎是放置在$ PATH中的脚本的问题。
不要使用函数,而要将代码放在脚本中:
#!/bin/bash
echo "callertest 1:"
cat /proc/$PPID/cmdline | tr ' ' ' '
echo "callertest 2:"
ps aux | grep $PPID
确保它是可执行的:
chmod +x test_script.bash
  然后用xargs执行它: 
seq 10 | xargs -n 1 -P $(nproc) ./test_script.bash
这应该涵盖所有情况:
get_scriptname()
{
    SCRIPTFILE=$(readlink -e -- "${0}" 2>/dev/null)
    until [ -e "${SCRIPTFILE}" ] || [ "$_PPID" = "0" ] ; do
        _PPID=$(awk '{print $4}' /proc/${_PPID:-$$}/stat 2>/dev/null)
        CMDLINE=$(awk -F ' ' '{print $2}' /proc/${_PPID}/cmdline 2>/dev/null)
        READLINK=$(readlink -e -- "${CMDLINE}" 2>/dev/null)
        WHICH=$(which -- "${CMDLINE}" 2>/dev/null)
        SCRIPTFILE=${READLINK:-${WHICH}}
    done
}
test_func()
{
    get_scriptname
    echo "${SCRIPTFILE}: $1"
}
export -f test_func get_scriptname
bash -c "test_func param0"
echo -e "param1nparam2nparam3" | xargs -n 1 -i bash -c "test_func {}"
