tcsh:来源文件的path

我在tcsh下find一个文件。 这个文件可以在文件系统的任何地方。 我如何检索我的源文件的path?

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

非常感谢 !

一点点的诡计给了我想要的东西。

有一件事我确定知道:文件的基本名称(不是整个path)。 在我的情况下,source_me.tcsh。 所以我们可以查询lsof当前的shell PID和grep的绝对path。

$$给你的PID。

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

你可以尝试下面这个,它应该在正常的(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 

如果你不想使用lsof ,只使用下面的csh。

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

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

无论哪种方法(由用户或其他脚本来源),脚本被调用,也被打开。 所以过滤fd的内容将得到脚本的真实path。

这也适用于脚本软链接到其他path!

据我所知,采购意味着你运行它,就好像你在命令行中一个接一个地input命令一样 。 那么,当然,你不能访问它的名字,因为他不是作为一个脚本来执行。

但是你可能很幸运,试着看看命令日志 。 在bash你只需input“ history ”,不知道tcsh但我想那里也一定有一个。

虽然这是可能的在其他shell中 ,我不明白在tcsh做到这一点。