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
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
.
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