![如何在源脚本中获取当前 shell 的绝对路径?](https://linux22.com/image/86649/%E5%A6%82%E4%BD%95%E5%9C%A8%E6%BA%90%E8%84%9A%E6%9C%AC%E4%B8%AD%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%20shell%20%E7%9A%84%E7%BB%9D%E5%AF%B9%E8%B7%AF%E5%BE%84%EF%BC%9F%20.png)
假设执行任一
. some_script
或者
source some_script
如何some_script
确定绝对路径当前的.
shell(即正在执行or命令的 shell source
)? (请注意,一般情况下,此路径与 的值不同$SHELL
。)
换句话说,我正在寻找 的“绝对路径”对应项$$
。我认为当前的 shell 进程必须知道可执行文件的来源,但 AFAICT,它没有存储在任何环境变量中。
我能想到的最好办法归结为抓取ps -p $$
;的合适变体生成的输出。例如:
CURRENT_SHELL=${"$( PS_FORMAT=cmd PS_PERSONALITY=linux ps -p $$ -h )"% *}
这可能不太便携。 (而且它很丑陋。)
我主要对当前 shell 是zsh
. (我对 的相应答案有次要兴趣bash
。)
答案1
这是我使用的:
head -n 1 /proc/$$/status | cut -f2
我不确定它是否可以移植到所有 Unices,但它可以在 Linux 和 Cygwin 中运行。