web-dev-qa-db-fra.com

Pourquoi dois-je obtenir [[: non trouvé lors de l'exécution d'un script?

J'essaie d'écrire un script qui doit vérifier si un fichier existe. Dans la console j'écris

if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

et je reçois

not mod

mais quand j'écris un script pour faire la même chose:

#!/bin/sh
if [[ -a /path/to/file.txt ]]; then echo "not mod"; else echo "mod"; fi

puis exécutez le script, je reçois ceci:

./ex.sh: 2: [[: not found
mod

J'ai sauvegardé le script sur le répertoire actuel et l'a nommé EX.SH, puis je m'assurai qu'il est exécutable. Pour appeler le script, je fais ceci:

./ex.sh

Pourquoi est-ce que je reçois ce problème? J'ai déjà essayé beaucoup de choses:

if [ -a /home ...

et

if test -a /home ...

Les deux revenaient

13: -a: unexpected operator
15
Buzu

Vous exécutez un script écrit pour -Bash sous SH, qui manque de nombreuses fonctionnalités de syntaxe étendues - [[ est une commande intégrée bash et n'est pas disponible dans sh.

Changement #!/bin/sh à #!/bin/bash ou pour #!/usr/bin/env bash.

10
kev

Spécifiez BASH au lieu de SH lors de l'exécution du script. J'ai personnellement remarqué qu'ils sont différents sous Ubuntu 12.10:

bash script.sh arg0 ... argn

0
Smeterlink