首页 > 解决方案 > 如何获取当前运行的 shell 脚本(cshell linux)的路径

问题描述

Linux/CSHELL:

如何获取正在获取的 tcsh 脚本的路径?
这不是 $PWD。而是脚本(文件)的路径。

版本/细节:

% echo $SHELL $PLATFORM
/tool/pandora/bin/tcsh linux_3.10.0_64
ls -l /tool/pandora/ bin/tcsh lrwxrwxrwx
1 潘多拉潘多拉 33 Oct 20 2016 /tool/pandora/bin/tcsh -> ../ .package/tcsh-6.19.00/bin/tcsh

对于这种类型的东西,这里有很多注释。但是我没有看到一个用于 linux c-shell 的。

提前致谢 !

例子:

我有一个文件 /home/myid/my_cshell.csh ...

set a = `readlink -f ${0}`
echo $a
echo ${0}

source /home/myid/my_cshell.csh
/tool/pandora/.package/tcsh-6.19.00/bin/tcsh
/tool/pandora/bin/tcsh

这给了我通向 tcsh 的路径,而不是 /home/myid/my_cshell.csh

如果我 tcsh 上面的脚本工作正常,但不是 source 它。我需要源文件的路径。

标签: linux

解决方案


假设您readlink有空:

readlink -f "${0}"

应该管用。${0}将为您提供相对路径,readlink -f并将其解析为绝对路径。

必须已经有某种方法可以引用该文件...如果没有,首先如何获得它?所以我想问题是${0}引用父文件系统的位置,而不是源文件。在这种情况下,readlink -f <file>应该仍然可以工作,但也许先尝试调用它,然后在运行时传递结果source。像这样:

main.csh:

#!/bin/csh

set p=`readlink -f source.csh`
source source.csh "${p}"

来源.csh:

#!/bin/csh
set pmain=`readlink -f "${0}"`
echo "my path is ${1}. main.csh's path is ${pmain}"

推荐阅读