2010-04-01 7 views

Antwort

9

Wenn Sie die sam sicherstellen wollen, e Ergebnis (vollständigen Pfad und Skriptname) versuchen, etwas wie folgt aus:

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

Dann können Sie es als foo.sh nennen, ./foo.sh, einige/untere/dir/foo.sh und immer noch die das gleiche Ergebnis, egal wie es heißt.

+0

Dank! Arbeite wirklich gut. –

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

In c-Schale, versuchen wie folgt aus:

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

Vielen Dank für die Rettung der Übersetzung. Es ist merkwürdig, dass der Fragesteller scheinbar csh wollte und sh-Syntax akzeptierte. – stevesliva

+0

Leider, wenn ich dies in meinem #!/Bin/csh-Skript mache und es mit einem relativen Pfad (./myscript.csh) starte, gibt es immer mein Heimatverzeichnis zurück. Es spielt keine Rolle, wo ich dieses Skript hinstelle. 'dirname $ 0' ist '.' und 'pwd' gibt mein $ HOME zurück – mdiehl13

+0

@ mdiehl13 Das von dir beschriebene Problem passiert mir nicht. Sehen Sie immer noch das gleiche Problem? Sie müssen möglicherweise Ihre .cshrc-Datei überprüfen und prüfen, ob spezielle Konfigurationen für die Einstellung des Verzeichnispfads vorhanden sind. – euccas

0

Wenn Sie einen absoluten Pfad wollen, dann sollten diese Ihnen helfen:

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

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

Verwandte Themen