tcsh :源文件的路径

tcsh :源文件的路径

我正在 tcsh 下获取一个文件。此文件可能位于文件系统上的任何位置。我如何检索源文件的路径?

$0 不起作用 : 我不执行该文件,我来源它。

非常感谢 !

答案1

如果您不想使用lsof,请仅对 csh 使用以下内容。

set script_path = `ls -l /proc/$$/fd | sed -e 's/^[^/]*//' | grep "/script_name"`

$$是当前正在运行的线程的 pid。

不管通过哪种方式(用户调用或者其他脚本调用),脚本都会被打开,所以过滤fd的内容就可以得到脚本的真实路径。

当脚本软链接到其他路径时这也有效!

答案2

稍微搜索一下就能得到我想要的东西。

有一件事我很确定:文件的基本名称(而不是整个路径)。在我的例子中,是 source_me.tcsh。因此,我们可以查询 lsof 以获取当前 shell PID 并 grep 绝对路径。

$$ 为您提供 PID。

/usr/sbin/lsof +p $$ | grep -oE /.\*source_me.tcsh

答案3

您可以尝试以下方法,该方法应该可以在普通 (t)csh 中工作。我不知道它是否也可以在 .(t)cshrc 中工作:

#!/bin/csh
set DUS = ( $_ ) #DUS: Dollar UnderScore
set DNU = $0:q   #DNU: Dollar NUll
if (( $#DUS > 1 )) then
  if ("${DUS[1]}" == 'source' || "$DNU:t" == 'tcsh' || "$DNU:t" == 'csh') then
    set DNU = ${DUS[2]:q}
  endif
endif
echo 'Your script path is: '`(cd "$DNU:h" >&! /dev/null; pwd)`
echo 'your script name is: '$DNU:t

答案4

虽然这在其他贝壳,我看不出有什么办法可以做到这一点tcsh

相关内容