假设我有3个shell脚本:
script_1.sh
#!/bin/bash
./script_3.sh
Run Code Online (Sandbox Code Playgroud)
script_2.sh
#!/bin/bash
./script_3.sh
Run Code Online (Sandbox Code Playgroud)
问题是script_3.sh我想知道调用者脚本的名称.
所以我可以对我支持的每个来电者做出不同的反应
请不要假设我问的是每次无论谁是来电者,$0原因$0都会回响script_3
这是一个具有预期输出的示例输入
./script_1.sh 应该回应 script_1
./script_2.sh 应该回应 script_2
./script_3.sh应该回声user_name or root or anything to distinguish between the 3 cases?
那可能吗?如果可能的话,怎么办呢?
这将被添加到一个rm修改过的脚本中...所以当我调用rm它做某事时,git或何时或任何其他CLI工具使用rm它不受修改的影响
Tho*_*est 55
基于@ user3100381的答案,这里有一个更简单的命令来获得相同的东西,我认为它应该是相当便携的:
PARENT_COMMAND=$(ps -o comm= $PPID)
Run Code Online (Sandbox Code Playgroud)
更换comm=用args=得到完整的命令行(命令+参数).该=单独用来抑制头.
请参阅:http://pubs.opengroup.org/onlinepubs/009604499/utilities/ps.html
小智 16
$ PPID变量保存父进程ID.所以你可以解析ps的输出来获取命令.
#!/bin/bash
PARENT_COMMAND=$(ps $PPID | tail -n 1 | awk "{print \$5}")
Run Code Online (Sandbox Code Playgroud)
基于@JLanswer,有更深入的解释,适用于linux:
cat /proc/$PPID/comm
Run Code Online (Sandbox Code Playgroud)
给出父pid的命令名称
如果您更喜欢带有所有选项的命令,那么:
cat /proc/$PPID/cmdline
Run Code Online (Sandbox Code Playgroud)
$PPID由shell定义,它是父进程的pid/proc/的目录。然后,如果您,则回显 PID 的命令名称cat /proc/$PPID/comm