2013-10-09 15 views
5

So che questa domanda è stata posta numerose volte, ma non sono riuscito a trovare alcuna soluzione valida. Quindi, chiedendo di nuovo se qualcuno può aiutare !!Directory di modifica dello script della shell con variabile

Sto provando a cambiare una mia directory di lavoro all'interno di uno script di shell con l'aiuto di una variabile. Ma ottengo " No such file or directory" ogni volta.

#!/bin/bash 
echo ${RED_INSTANCE_NAME} <-- This correctly displays the directory name 
cd $RED_INSTANCE_NAME  <-- This line gives the error 

Ora, quando cerco di dare il nome della directory in realtà invece di utilizzare la variabile, shell cambia la directory senza problemi

cd test <-- No error 

Qualcuno sa che cosa può essere il problema qui? Per favore aiuto !!

+0

Come stai impostando il valore di 'RED_INSTANCE_NAME'? – chepner

+0

Prova a dire "cd" $ {RED_INSTANCE_NAME} "' – devnull

+0

Se pensi che questa domanda sia già stata fatta, potrebbe essere utile collegare a quelle domande simili e spiegare perché le risposte non sono giuste per te. –

risposta

9

La variabile contiene un ritorno a capo. Prova a dire:

cd $(echo $RED_INSTANCE_NAME | tr -d '\r') 

e dovrebbe funzionare. Al fine di rimuovere il CR dalla variabile si può dire:

RED_INSTANCE_NAME=$(echo $RED_INSTANCE_NAME | tr -d '\r') 

Il seguente avrebbe illustrare il problema:

$ mkdir abc 
$ foo=abc$'\r' 
$ echo "${foo}" 
abc 
$ cd "${foo}" 
: No such file or directory 
$ echo $foo | od -x 
0000000 6261 0d63 000a 
0000005 
$ echo $foo | tr -d '\r' | od -x 
0000000 6261 0a63 
0000004 
$ echo $'\r' | od -x 
0000000 0a0d 
0000002 
+0

Grazie per il puntatore. Effettivamente ho avuto un ritorno a capo alla fine della variabile. – Vivek

+0

o 'cd \' echo $ RED_INSTANCE_NAME | tr -d '\ r' \ '' –

5

Prova

cd "$RED_INSTANCE_NAME" 

Inoltre, assicurarsi che il percorso ha un senso alla directory corrente in cui viene eseguito cd comando.

+1

Grazie per aver risposto, ma ci ho provato anche io. Ma nessun aiuto. dà ancora l'errore !! E sì, sono sicuro che sto eseguendo questo comando nella directory corretta – Vivek

+0

Qual è l'errore che stai vedendo? Prova a eseguire tramite "bash -x" per vedere cosa esegue. –

1

Non so che cosa sta andando male per te, ma posso offrire un consiglio generale:

cd "$RED_INSTANCE_NAME"  # Quote the string in case it has spaces.error 

Si dovrebbe quasi sempre mettere il "$ variabile" tra virgolette. Questo proteggerà dalle sorprese quando il valore della variabile contiene cose divertenti (come gli spazi).

+0

Grazie per aver risposto, ma ci ho provato anche io. Ma nessun aiuto. dà ancora l'errore !! – Vivek

1

È possibile verificare la presenza di ritorni a capo, ANSI fughe e altri caratteri speciali con

cat -v <<< "$RED_INSTANCE_NAME" 

questo mostrerà tutti i caratteri che echo $RED_INSTANCE_NAME sarebbe solo nascondere o ignorare.

In particolare, se il tuo messaggio di errore è : No such file or directory in contrasto con bash: cd: yourdir: No such file or directory, significa che hai un ritorno a capo alla fine della variabile, probabilmente dalla lettura da un file formattato DOS.

2

Un modo per incontrare il problema descritto è quello di avere una tilde (~) nel nome della variabile. Utilizzare invece il percorso assoluto o la variabile $HOME. Si noti che l'utilizzo di $HOME richiede virgolette.

# doesn't work 
$ vartilde='~/' 
$ cd $vartilde 
-bash: cd: ~: No such file or directory 

# works 
$ varfullpath='/Users/recurvirostridae' 
$ cd $varfullpath 

# works 
$ varwithhome="$HOME" 
$ cd $varwithhome 
Problemi correlati