这看起来可能是一个愚蠢的简单问题,但是我找不到合适的方法来找到调用方。
我有一个可以在不同应用程序中使用的工具。我想记录谁在使用它。
请注意,在使用source
(或点快捷方式)进行采购时,正在执行的程序是bash
(或您指定的 shell )。在这种情况下,仅当您获取“工具”时,调用历史记录才会保留在${BASH_SOURCE[*]}
上,包括在${BASH_LINENO[*]}
上的调用行。
我希望BASH_SOURCE给出一些提示(历史记录),但是该工具不是源代码,因此没有对“BASH_SOURCE”上的调用者的引用。
#!/bin/bash
# this is the tool: I'm expecting to have 'client' somewhere
echo "Source ${BASH_SOURCE[*]}"
ps -axj | grep "\s$$\s"
echo "tool: ${*}"
现在,这是客户来电者#!/bin/bash
# this is the client
chmod +x ./tool # I'm making this explicit
./tool this is a test
结果如下:$ . ./client
Source ./tool
30389 17217 17217 30389 pts/1 17217 S+ 0 0:00 /bin/bash ./tool this is a test
17217 17218 17217 30389 pts/1 17217 R+ 0 0:00 ps -axj
17217 17219 17217 30389 pts/1 17217 S+ 0 0:00 grep \s17217\s
30380 30389 30389 30389 pts/1 17217 Ss 0 0:01 -bash
tool: this is a test
最佳答案
这可能对Linux有帮助:
#!/bin/bash
GPPID=$(ps -o ppid= -p $PPID | tr -d ' ')
cat /proc/$GPPID/comm