2010-11-09 6 views
2

désolé, je suis relativement nouveau pour bash, maispourquoi bash me dit que la commande if est introuvable lorsque je cours le code suivant?

if [ ! -d /home/$USER/testfoo ]; then mkdir /home/$USER/testfoo; fi 

a l'effet désiré de faire un testfoo répertoire si elle n'existe pas

mais

TESTCMD="if [ ! -d /home/$USER/testfoo ]; then mkdir /home/$USER/testfoo; fi" 
$TESTCMD 

retours

if: command not found 

Qu'est-ce que je fais mal?

+1

Voir [BashFAQ/050] (http://mywiki.wooledge.org/BashFAQ/050). –

Répondre

3

Si vous utilisez une variable comme une commande comme celle-ci, elle interprète le contenu de la variable comme le nom de la commande, et non comme une commande suivie de ses arguments.

Donc, si vous vous faites VAR="foo bar" puis $VAR il recherche un fichier exécutable (ou intégré) appelé foo bar, non pas pour un exécutable appelé foo qu'il appelle l'argument bar.

Pour faire ce que vous voulez, vous devez définir une fonction:

TESTCMD() { 
    if [ ! -d /home/$USER/testfoo ] 
    then 
    mkdir /home/$USER/testfoo 
    fi 
} 
TESTCMD 
+0

Merci pour l'explication, mais TESTCMD() renvoie un carat et pas de nouveau répertoire .... il semble que je n'ai pas besoin de la parens –

+0

@David: Droit, pas de parens. Ma faute. – sepp2k

+0

pouvez-vous expliquer pourquoi ssh utilisateur @ serveur TESTCMD renvoie «TESTCMD: aucun fichier ou répertoire»? ou devrait-ce être une autre question? –

Questions connexes