2012-04-13 9 views
0
for FILE in /data/intervals/*.txt; do 
    ID=echo ${FILE} 
    /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${ID} 
done 

Giving:für FILE in Permission denied & mehrdeutig Umleitung

-bash: /data/intervals/CT.BP.200.txt: Permission denied 
-bash: /data/final/Outputed_${ID}: ambiguous redirect 
-bash: /data/intervals/CT.BP.500.txt: Permission denied 
-bash: /data/final/Outputed_${ID}: ambiguous redirect 
-bash: /data/intervals/CT.BP.50.txt: Permission denied 
-bash: /data/final/Outputed_${ID}: ambiguous redirect 
.... 

usw.

Ich kann keinen Tippfehler Fehler erkennen. Kann mir jemand dabei helfen?

Antwort

3
ID=echo ${FILE} 

tut nicht tun, was Sie denken, es tut. Es setzt die Umgebungsvariable ID tatsächlich auf den Wert echo und versucht dann, auszuführen${FILE}, daher die Berechtigung verweigert.

Wenn Sie ID basierend auf FILE festlegen möchten, müssen Sie etwas wie eine von:

ID=$(echo ${FILE} | sed 'some sed command here') 
ID=$(basename ${FILE}) 

oder, wenn man es nur will FILE selbst gesetzt:

ID=${FILE} 

Aber in dieser Fall, ID ist wahrscheinlich unnötig und Sie können etwas tun, wie:

for FILE in /data/intervals/*.txt; do 
    /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${FILE} 
done 
-1
for FILE in /data/intervals/*.txt; do /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${FILE}; done 

Ich glaube, Sie Tool zu tun, wollen für jede Datei .txt auf/data/Intervalle Verzeichnis und Ausgabe Ihres Prozesses zu einer benutzerdefinierten Output_my.CT.BP.200.txt

oder ... tun Sie möchte ID aus dem Dateinamen e extrahieren und für die Ausgabe verwenden?

for FILE in /data/intervals/*.txt; do IDFILE=$(echo $FILE | cut -d'.' -f3); /data/bin/Tool -a /data/check.txt -b ${FILE} > /data/final/Outputed_${IDFILE}; done 

I Schnitt für quick-and-dirty-Lösung bin, können Sie ein anderes System verwenden (awk, sed, Perl)

Verwandte Themen