2016-11-03 2 views
0

Teil meines Bash-Skript funktioniert ist eine Reihe von Ordnern zuzugreifen:Bash-Skript cd nicht

#lsit of folders 
locations=("/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314a" 
    "/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314b" 
    "/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314c") 

for i in "${locations[@]}" 
do (
    #change to directory 

    cd "$i" 
    #convert tiff to png 

Jedoch, wenn ich Fehler empfangen:

/Users/luna/Documents/Ethan/scripts/microglia.sh: line 16: cd: /Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314a/: No such file or directory 

ich nur cd habe versucht, in diesen Ordner am Terminal und es hat absolut funktioniert. Wie kommt es, dass es einfach nicht in einem Shell-Skript funktioniert?

+1

Hier ist eine Idee. Sie sollten es auf Ihrem Terminal versuchen. Diese 2 werden funktionieren: 'cd/Volumes/Israel \ Hernandez',' cd'/Bände/Israel Hernandez ''. Aber dieser wird nicht funktionieren: 'cd"/Bände/Israel \ Hernandez "'. Der umgekehrte Schrägstrich in doppelten Anführungszeichen in der Zuweisung der Verzeichnisse in das Array 'locations' ist der Übeltäter. – alvits

Antwort

1

Sie müssen die Backslash-Escapes nicht vor den Leerzeichen verwenden, da die Leerzeichen bereits in einer Zeichenfolge mit doppelten Anführungszeichen enthalten sind. Ihr Angebot ist korrekt — freuen Sie sich! Entfernen Sie die Backslashes innerhalb Ihrer "" Strings und Sie sollten eingestellt werden.

0

Der Fehler ist eindeutig: "Keine solche Datei oder Verzeichnis!" Sie können den Befehl "CD/Bände/Israel \ Hernandez/Quantitative \ Data/Microglia \ data/3 \ month/Mutant/314a /" auf dem Terminal ausführen.
Wenn der Fehler "Keine solche Datei oder Verzeichnis!" Ist, sollten Sie den Pfad sorgfältig überprüfen. Zweifeln Sie nicht am Skriptparser selbst! Zweifeln Sie einfach an Ihrem Code!

+0

"Zeile 16: CD:/Volumes/Israel \ Hernandez/Quantitative \ Daten/Microglia \ Daten/3 \ Monat/Mutant/314a /" –

+0

"Zeile 16: CD:/Bände/Israel \ Hernandez/Quantitative \ Data/Microglia \ data/3 \ month/Mutant/314a/"überprüfen Sie den Fehler dieses Pfades! Kopieren Sie den fehlerhaften Pfad auf Ihrem Terminal. –

0

vor dem Befehl cd, sollten Sie den Escape-Platz in Ihrem $ i verarbeiten. hier ist der Code, hoffe es hilft.

#lsit of folders 
locations=("/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314a" 
    "/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314b" 
    "/Volumes/Israel\ Hernandez/Quantitative\ Data/Microglia\ data/3\ month/Mutant/314c") 

for i in "${locations[@]}" 
do (

    #reverse esxape chars such space in you code 
    i="echo \$\'"$(echo $i|sed -e 's|\\|\\\\|g')"\'" 
    i=$(eval "echo $(eval $i)") 
    i=$(eval "echo $(eval $i)") 

    #change to directory 
    cd "$i" 
    #convert tiff to png 
+0

Das sieht so aus als würde es funktionieren (habe es nicht selbst ausprobiert). Ich möchte Sie erwähnen sollte sehr vorsichtig mit 'eval' sein, um Sicherheitslöcher oder andere Probleme zu vermeiden.] (http://stackoverflow.com/q/17529220/2877364) – cxw