2012-06-05 9 views
11

Comment puis-je consulter le répertoire en cours dans un script shellReportez-vous au répertoire courant dans un script shell

J'ai donc ce script qui appelle un autre script dans le même répertoire

#! /bin/sh 

#Call the other script 
./foo.sh 

# do something ... 

Pour cette Je suis ./foo.sh: No such file or directory

Alors je l'ai changé:

#! /bin/sh 

#Call the other script 
foo.sh 

# do something ... 

Mais cela appelle le script foo qui est, par défaut, dans le PATH. Ce n'est pas ce que je veux. Donc, la question est, quelle est la syntaxe de faire './`Dans un script shell?

+1

'. /' Désigne le répertoire de travail actuel, et non le répertoire qui stocke le fichier de script en cours d'exécution. Je ne suis pas sûr d'un mécanisme pour obtenir le répertoire contenant le script en cours d'exécution. Mais si votre premier script est dans le 'PATH', alors le deuxième script ... – sarnold

Répondre

18

Si les deux scripts se trouvent dans le même répertoire et que vous avez l'erreur ./foo.sh: No such file or directory, la cause la plus probable est que vous avez exécuté le premier script à partir d'un répertoire différent de celui dans lequel ils se trouvent. script pour que l'appel à foo.sh fonctionne quel que soit l'endroit où vous appelez le premier script:

my_dir=`dirname $0` 
#Call the other script 
$my_dir/foo.sh 
+0

Fonctionne bien !!! Merci –

+0

Comment gérez-vous les espaces dans les noms de répertoires? Il génère une erreur – roosevelt

+0

Le chemin d'accès complet au répertoire est '$ PWD/$ my_dir' –

0

la solution retenue ne fonctionne pas si vous avez un espace dans le chemin d'accès au répertoire contenant les scripts.

Si vous pouvez utiliser bash, cela a fonctionné pour moi:

#!/bin/bash 
SCRIPTDIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
"${SCRIPTDIR}/foo.sh" 
4

Le code suivant fonctionne bien avec des espaces et ne nécessite pas bash au travail:

#!/bin/sh 

SCRIPTDIR="$(dirname "$0")" 

#Call the other script 
"$SCRIPTDIR/foo.sh" 

Aussi, si vous voulez utiliser le chemin absolu, vous pouvez le faire:

SCRIPTDIR=`cd "$(dirname "$0")" && pwd` 
Questions connexes