2010-04-01 12 views

risposta

9

Se si vuole garantire la Sam ruby risultato e (percorso completo e il nome dello script) provare qualcosa di simile:

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

Poi si può chiamare come foo.sh, ./foo.sh, alcuni/basso/dir/foo.sh e ancora ottenere il stesso risultato, non importa come viene chiamato.

+0

Grazie! Funziona davvero bene. –

2
#!/bin/tcsh 
echo "I am $0." 
7

In C shell, provare in questo modo:

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

Grazie per avermi salvato la traduzione. È strano che l'interrogante apparentemente volesse csh e abbia accettato la sintassi sh. – stevesliva

+0

Sfortunatamente quando faccio questo nel mio #!/Bin/csh script ed eseguo con un percorso relativo (./myscript.csh), restituisce sempre la mia home directory. Non importa dove metto questo script. 'dirname $ 0' è '.' e 'pwd' restituisce il mio $ HOME – mdiehl13

+0

@ mdiehl13 Il problema che hai descritto non mi capita. Hai ancora lo stesso problema? Potrebbe essere necessario controllare il file .cshrc e vedere se ci sono configurazioni speciali correlate alle impostazioni del percorso della directory. – euccas

0

Se si desidera un percorso assoluto allora questo dovrebbe aiutarvi:

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

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