如何找到我正在执行的 tcsh shell 脚本的位置?

问题描述 投票:0回答:5

假设我将可执行的 tcsh 文件放在 /path/to/my_script.csh 中

我当前的目录在任何地方,例如我在 /path

所以我输入/my_script.csh

我想在 my_script.csh 中有一行返回“/path/to/my_script.csh” - 就像 ruby 的

__FILE__
path shell directory tcsh
5个回答
11
投票

在c shell中,尝试这样:

set rootdir = `dirname $0`
set abs_rootdir = `cd $rootdir && pwd`
echo $abs_rootdir

6
投票

如果您想确保相同的结果(完整路径和脚本名称),请尝试以下操作:

...
rootdir=`/bin/dirname $0`       # may be relative path
rootdir=`cd $rootdir && pwd`    # ensure absolute path
zero=$rootdir/`/bin/basename $0`
echo $zero
...

然后你可以将其称为 foo.sh、./foo.sh、some/lower/dir/foo.sh,无论如何调用,仍然得到相同的结果。


6
投票

如果您想要绝对路径,那么这应该可以帮助您:

#!/bin/tcsh -f 
set called=($_)

if ( "$called" != "" ) then  ### called by source 
   echo "branch 1"
   set script_fn=`readlink -f $called[2]`
else                         ### called by direct execution of the script
   echo "branch 2"
   set script_fn=`readlink -f $0`
endif

echo "A:$0"
echo "B:$called"
set script_dir=`dirname $script_fn`

echo "script file name=$script_fn"
echo "script dir=$script_dir"

来源:http://tipsarea.com/2013/04/11/how-to-get-the-script-path-name-in-cshtcsh/


1
投票
#!/bin/tcsh
echo "I am $0."

0
投票

以下方法在来自终端和另一个脚本时都有效:

(假设要获取的文件名是“script.cshrc”)

set sourced=`ls -l /proc/$$/fd | sed -e 's/^[^/]*//' | grep "/script.cshrc"`
set source_dir="`dirname $sourced`"
set script_dir=`realpath $source_dir`

第一个语句列出当前进程的打开文件描述符(包括源脚本)和 grep 获取其完整路径。

© www.soinside.com 2019 - 2024. All rights reserved.