2010-04-01 21 views

Répondre

9

Si vous voulez vous assurer que le sam résultat e (chemin complet et le nom du script) essayer quelque chose comme ceci:

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

Ensuite, vous pouvez l'appeler comme foo.sh, ./foo.sh, certains// bas dir/foo.sh et toujours obtenir la même résultat, peu importe comment il s'appelle.

+0

Merci! Travaille vraiment bien. –

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

Dans shell c, essayez comme ceci:

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

Merci de m'avoir sauvé la traduction. Il est étrange que le questionneur voulait apparemment csh, et accepté la syntaxe sh. – stevesliva

+0

Malheureusement quand je le fais dans mon script #!/Bin/csh, et que je l'exécute avec un chemin relatif (./myscript.csh), il retourne toujours mon répertoire personnel. Peu importe où je mets ce script. 'dirname $ 0' est '.' et 'pwd' renvoie mon $ HOME – mdiehl13

+0

@ mdiehl13 Le problème que vous avez décrit ne m'arrive pas. Voyez-vous toujours le même problème? Vous devrez peut-être vérifier votre fichier .cshrc et voir s'il existe des configurations spéciales liées au paramètre de chemin de répertoire. – euccas

0

Si vous voulez un chemin absolu, cela devrait vous aider:

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

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