如何找到我正在执行的 tcsh shell 脚本的位置?
Posted
技术标签:
【中文标题】如何找到我正在执行的 tcsh shell 脚本的位置?【英文标题】:How can I find the location of the tcsh shell script I'm executing? 【发布时间】:2011-02-03 12:47:18 【问题描述】:假设我将一个可执行的 tcsh 文件放在 /path/to/my_script.csh 中
我的当前目录在任何地方,例如我在 /path
所以我输入到/my_script.csh
我想在 my_script.csh 中有一行返回 "/path/to/my_script.csh" - 就像 ruby 的
__FILE__
【问题讨论】:
【参考方案1】:在 c shell 中,试试这样:
set rootdir = `dirname $0`
set abs_rootdir = `cd $rootdir && pwd`
echo $abs_rootdir
【讨论】:
不幸的是,当我在我的 #!/bin/csh 脚本中执行此操作并使用相对路径 (./myscript.csh) 运行它时,它总是返回我的主目录。我把这个脚本放在哪里都没关系。dirname $0
是“。” pwd
返回我的 $HOME
@mdiehl13 你描述的问题没有发生在我身上。你还看到同样的问题吗?您可能需要检查您的 .cshrc 文件,看看是否有与目录路径设置相关的特殊配置。
@euccas 不,奇怪(而且很好)。我不再看到这种行为了【参考方案2】:
如果您想确保相同的结果(完整路径和脚本名称),请尝试以下操作:
...
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 并且无论怎么调用它仍然得到相同的结果。
【讨论】:
错误的外壳-_-【参考方案3】:如果你想要一个绝对路径,那么这应该可以帮助你:
#!/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/
【讨论】:
感谢您让我对如何区分源脚本和调用脚本不再感到沮丧【参考方案4】:#!/bin/tcsh
echo "I am $0."
【讨论】:
这给出了从当前目录到脚本的路径,而不是绝对路径。以上是关于如何找到我正在执行的 tcsh shell 脚本的位置?的主要内容,如果未能解决你的问题,请参考以下文章