2009-06-10 6 views
2

Voici un script bash je travaille sur:erreur étrange vérifier si le répertoire existe avec le script Bash

dir="~/path/to/$1/folder" 

if [ -d "$dir" ]; then 
    # do some stuff 
else 
    echo "Directory $dir doesn't exist"; 
    exit 1 
fi 

et quand je le lance à partir du terminal:

> ./myscript.sh 123 
Directory ~/path/to/123/folder doesn't exist

Mais ce dossier ne clairement exister. Cela fonctionne normalement:

> ls ~/path/to/123/folder

Qu'est-ce que je fais mal?

Répondre

1

essayer:

dir="$HOME/path/to/$1/folder" 
+2

Juste parce que Joakim n'a fourni aucune explication: Vous avez cité le ~. ~ se développe seulement dans bash pendant l'expansion du tilde, mais tout ce que vous citez, vous désactivez la signification spéciale de, de sorte que le tilde (~) ne signifie plus "se développe dans le répertoire personnel de l'utilisateur courant". Cela signifiait simplement: "le répertoire dans le répertoire courant appelé ~". Ce qui n'existait pas, d'où l'erreur. – lhunath

5

Le problème est que bash effectue tilde avant la substitution des paramètres shell, donc après qu'il se substitue ~/path/to/folder pour $dir, il ne cherche pas à étendre ~, il cherche un répertoire littéralement nommé avec un tilde, ce qui bien sûr n'existe pas. Voir section 3.5 of the bash manual pour une explication plus détaillée sur les expansions de bash.

+1

Ah merci pour l'explication! – nickf

Questions connexes