我正在从shell脚本中尝试给定PPID的绝对路径。但是,父进程可以是任何类型的脚本(bash/csh/zsh/tsh/Makefile(。
子进程始终是一个bash脚本,并且是我唯一有权编辑的脚本。
我尝试过:
-
ps --no-headers -o command $PPID
,但它只获取调用父进程的命令。这不是我需要的,因为父级可能在脚本中造成了一些cd,我将无法解析命令中的相对路径。 -
ls -l /proc/$PPID/fd/255
,这是最接近我想要的,但这是特定于bash脚本的,正如我所提到的,我没有权限知道我的父进程的脚本类型。 -
/proc/$PPID/exe
返回二进制文件exe,我需要使用该二进制文件的脚本的绝对路径。
-
没有";绝对路径。访问同一文件可能有几种方法。有时,它们中没有一个(或者不止一个,取决于你如何看待它(是";";主要名称。例如,我正在考虑这里的硬链接。
-
Makefile从来都不是脚本的路径。它只是一个配置文件。默认情况下由可执行文件读取。可能是
/usr/bin/make
。要找到Makefile
文件的路径,需要读取make的参数。或者在打开的文件中找到一个Makefile
(假设只有一个,并且它被命名为Makefile
,这是不确定的(。并且猜测什么是make
过程的Makefile
的策略是特定于make
的。您需要另一种策略来猜测bash
进程执行的脚本文件是什么,另一种是找到python命令执行的python文件是什么(可以是shebang python"可执行文件"、python ../somerealtive/path/somefile.py
、python /some/absolute/paht
、python -m somemodele
、python -c "import somemod ; somemod.run()"
等( -
现在,既然您提到了
/proc/$PPID/exe
,那么您可以获得文件";尖的";通过此,使用path=$(readlink -f /proc/$PPID/exe)
同样,这是linux解决方案,而不是bash解决方案。bash不能保证运行此命令的系统具有/proc
文件系统
我必须补充一点,我怀疑这里有XY问题。你到底想做什么?