当前运行的zsh的绝对路径?

有时的输出会ps -p $$显示当前正在运行的绝对路径zsh

% ps -p $$
  PID TTY           TIME CMD
 1027 ttys005    0:00.11 /usr/local/bin/zsh

但不总是:

% ps -p $$
  PID TTY           TIME CMD
 1507 ttys003    0:00.07 zsh -fl

获得通往当前运行路径的一致方法是什么zsh

编辑(说明):我对主要在Darwin和Linux中以及在NetBSD中如何进行此操作感兴趣。

斯蒂芬·查泽拉斯(Stephane Chazelas)

CMD通过输出ps或者是进程名或传递到该命令的参数(包括第一个参数argv[0])。尽管它与可执行文件的路径有关,但是并不能保证将它们链接起来。

在Linux上:

print -r -- /proc/self/exe(:A)

在Darwin和Linux以及可能的其他产品上:

lsof -ap"$$" -dtxt  -Fn | sed '2!d;s/.//;q'

但是我不知道它有多可靠。

另一个启发式:

print -r -- ${${0#-}:c:A}

$0,就像您在ps输出中看到的那样,它包含第一个zsh接受了(argv[0])的参数,或者在将脚本作为参数传递时,该参数。

在第一种情况下,通常,(按照惯例,有没有担保)这argv[0]将是A路径包括一个/(相对或绝对),或zsh(东西没有/在这种情况下,主叫方将纷纷抬头)zsh $PATH或他的命令哈希表...如果路径是相对的,则仅当自调用zsh以来当前目录未更改时,以上方法才有效。如果没有/,则该方法仅zsh在以与调用者相同的方式查找可执行文件时才起作用

对于脚本,将返回脚本的路径而不是解释器的路径(与前两个解决方案相反)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章