Как я могу найти расположение выполняемого сценария оболочки tcsh? - PullRequest
9 голосов
/ 02 апреля 2010

Скажем, я поместил исполняемый файл tcsh в /path/to/my_script.csh

и мой текущий каталог находится где угодно, например я в / path

Поэтому я набираю / my_script.csh

Я хочу иметь строку в my_script.csh, которая будет возвращать "/path/to/my_script.csh" - как у * ruby ​​

__FILE__

Ответы [ 4 ]

10 голосов
/ 25 июля 2014

В оболочке c попробуйте так:

set rootdir = `dirname $0`
set abs_rootdir = `cd $rootdir && pwd`
echo $abs_rootdir
8 голосов
/ 05 января 2012

Если вы хотите обеспечить одинаковый результат (полный путь и имя скрипта), попробуйте что-то вроде этого:

...
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 и все равно получить тот же результат, независимо от того, как он называется.

1 голос
/ 02 апреля 2010
#!/bin/tcsh
echo "I am $0."
0 голосов
/ 10 июля 2017

Если вы хотите абсолютный путь, это должно вам помочь:

#!/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 excution 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/

...