2013-04-18 12 views
6

Qualche idea di cosa non funziona con questo codice?Problema della shell durante il tentativo di mkdir

CLIENT_BUILD_DIR="~/Desktop/TempDir/" 

if [ ! -d $CLIENT_BUILD_DIR ] 
then 
    { 
     mkdir $CLIENT_BUILD_DIR 
    } 
fi 

Ho ricevuto l'errore: mkdir: ~/Desktop: Nessun file o directory.

Ovviamente la directory è lì e lo script funziona se sostituisco la variabile con ~/Desktop/TempDir/

+1

Un altro consiglio, è possibile semplificare il codice per '[-d $ CLIENT_BUILD_DIR] || mkdir $ CLIENT_BUILD_DIR' e preferibilmente aggiungi '|| echo "Errore nel tentativo di creare dir: $ CLIENT_BUILD_DIR" ':) – Jite

risposta

14

Le virgolette impediscono l'espansione di ~.

Usa:

CLIENT_BUILD_DIR=~/Desktop/TempDir/ 

if [ ! -d "$CLIENT_BUILD_DIR" ] 
then mkdir "$CLIENT_BUILD_DIR" 
fi 
+1

L'ha fatto! Grazie mille –

+1

Si potrebbe anche evalare :) – Jite

5

Il ~ personaggio non è reinterpretare quando viene utilizzato in una variabile.

È possibile utilizzare invece CLIENT_BUILD_DIR="$HOME/Desktop/TempDir/".

+0

Mi hai appena salvato tempo e un sacco di sbattere la testa! – Moseleyi

6

Perché non semplicemente:

mkdir -p "$CLIENT_BUILD_DIR" 

Nota -p.

+0

Ottimo suggerimento! Grazie! –

Problemi correlati