如何使用PPID-Bash获取脚本的绝对路径



我正在从shell脚本中尝试给定PPID的绝对路径。但是,父进程可以是任何类型的脚本(bash/csh/zsh/tsh/Makefile(。

子进程始终是一个bash脚本,并且是我唯一有权编辑的脚本。

我尝试过:

  1. ps --no-headers -o command $PPID,但它只获取调用父进程的命令。这不是我需要的,因为父级可能在脚本中造成了一些cd,我将无法解析命令中的相对路径。

  2. ls -l /proc/$PPID/fd/255,这是最接近我想要的,但这是特定于bash脚本的,正如我所提到的,我没有权限知道我的父进程的脚本类型。

  3. /proc/$PPID/exe返回二进制文件exe,我需要使用该二进制文件的脚本的绝对路径。

  • 没有";绝对路径。访问同一文件可能有几种方法。有时,它们中没有一个(或者不止一个,取决于你如何看待它(是";";主要名称。例如,我正在考虑这里的硬链接。

  • Makefile从来都不是脚本的路径。它只是一个配置文件。默认情况下由可执行文件读取。可能是/usr/bin/make。要找到Makefile文件的路径,需要读取make的参数。或者在打开的文件中找到一个Makefile(假设只有一个,并且它被命名为Makefile,这是不确定的(。并且猜测什么是make过程的Makefile的策略是特定于make的。您需要另一种策略来猜测bash进程执行的脚本文件是什么,另一种是找到python命令执行的python文件是什么(可以是shebang python"可执行文件"、python ../somerealtive/path/somefile.pypython /some/absolute/pahtpython -m somemodelepython -c "import somemod ; somemod.run()"等(

  • 现在,既然您提到了/proc/$PPID/exe,那么您可以获得文件";尖的";通过此,使用path=$(readlink -f /proc/$PPID/exe)

同样,这是linux解决方案,而不是bash解决方案。bash不能保证运行此命令的系统具有/proc文件系统

我必须补充一点,我怀疑这里有XY问题。你到底想做什么?

相关内容

  • 没有找到相关文章