使用TCSH时获取shell脚本的完整路径时出现问题

使用TCSH时获取shell脚本的完整路径时出现问题,shell,tcsh,Shell,Tcsh,我正在使用tcsh,我正在尝试获取当前shell脚本的路径,但没有成功 我的脚本包含: echo $0 源tmp.csh返回 /usr/lbin/tcsh dirname $0 返回/usr/lbin使用$\ucode>(作为脚本执行的第一件事将其保存在变量中)而不是$0 #!/bin/tcsh set called=($_) if ("$called" != "") then echo "sourced $called[2]" # the script was sourced

我正在使用tcsh,我正在尝试获取当前shell脚本的路径,但没有成功

我的脚本包含:

echo $0
源tmp.csh返回

/usr/lbin/tcsh

dirname $0
返回/usr/lbin

使用
$\ucode>(作为脚本执行的第一件事将其保存在变量中)而不是
$0

#!/bin/tcsh
set called=($_)
if ("$called" != "") then
    echo "sourced $called[2]"    # the script was sourced from this location
endif
if ("$0" != "tcsh") then
    echo "run $0"                # the script was run from this location
endif
编辑:

也许在您的
.cshrc
中:

set basepath=/path/to/base
source "$basepath/scriptname" "$basepath"
在基本脚本中:

source "$1/subscript"
除非基本脚本位于
$PATH
中,否则这种情况下,您只是在给自己制造麻烦。

请使用
$\u
(将其保存在变量中,就像脚本所做的第一件事一样),而不是
$0

#!/bin/tcsh
set called=($_)
if ("$called" != "") then
    echo "sourced $called[2]"    # the script was sourced from this location
endif
if ("$0" != "tcsh") then
    echo "run $0"                # the script was run from this location
endif
编辑:

也许在您的
.cshrc
中:

set basepath=/path/to/base
source "$basepath/scriptname" "$basepath"
在基本脚本中:

source "$1/subscript"

除非基本脚本在您的
$PATH
中,否则您只是在给自己制造麻烦。

第一个回音没有返回任何内容。它只是“调用”@Sam:如果您运行它(例如
/script.tcsh
),它就会这样做。如果你找到它的来源,它会回显这个位置(我正在删除那一行,因为它很混乱。),这是有效的。但现在我想通过.cshrc获取文件的源代码。在这种情况下,$\为空,我无法获取路径。在这种情况下,获取路径的解决方案是什么?@Sam:最好编写脚本,这样它就不需要知道从哪里运行。例如,如果您试图从同一位置加载配置文件,正确的方法是将文件放在固定位置并引用该位置。通常的方法是将它放在
/etc/somedir
$HOME/somedir
或类似的地方。为什么你需要知道剧本在哪里?我同意。但仍然存在一个问题。我将通过.cshrc调用一个标准的基本脚本。该基本脚本将在内部调用同一目录和子目录中的其他脚本。为了寻找其他脚本的来源,我需要基本脚本中这些脚本的路径。我可以将固定路径放在.cshrc中,但我不想将固定路径放在基本脚本中。我想要一个相对路径。我知道这很复杂,但这正是我们想要的。第一次回声没有返回任何东西。它只是“调用”@Sam:如果您运行它(例如
/script.tcsh
),它就会这样做。如果你找到它的来源,它会回显这个位置(我正在删除那一行,因为它很混乱。),这是有效的。但现在我想通过.cshrc获取文件的源代码。在这种情况下,$\为空,我无法获取路径。在这种情况下,获取路径的解决方案是什么?@Sam:最好编写脚本,这样它就不需要知道从哪里运行。例如,如果您试图从同一位置加载配置文件,正确的方法是将文件放在固定位置并引用该位置。通常的方法是将它放在
/etc/somedir
$HOME/somedir
或类似的地方。为什么你需要知道剧本在哪里?我同意。但仍然存在一个问题。我将通过.cshrc调用一个标准的基本脚本。该基本脚本将在内部调用同一目录和子目录中的其他脚本。为了寻找其他脚本的来源,我需要基本脚本中这些脚本的路径。我可以将固定路径放在.cshrc中,但我不想将固定路径放在基本脚本中。我想要一个相对路径。我知道这很复杂,但这正是我们想要的。