
Ich habe diesen Befehl, den ich in der Bourne-Shell für Solaris 9 ausführen möchte.
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
Mein Problem besteht darin, dass die Variable ${PARSEDATA}
nicht richtig funktioniert. Ich habe versucht, sie in Anführungszeichen zu setzen. Das Problem besteht jedoch darin, dass es sich $0
um den Namen des Skripts handelt, das diesen Code ausführt, und nicht um die Datei, die mit dem Befehl gefunden wurde find
.
Alle Vorschläge zur Lösung dieses wahrscheinlich einfachen Problems sind äußerst hilfreich.
Dank im Voraus.
Aktualisieren: $0
ist der Name des mit dem find
Befehl gefundenen Skripts, die Variable für ${PARSEDATA}
ist ein Filter, der sich irgendwo im System befindet und die Ausgabe jedes gefundenen Skripts ändert. Das Problem ist jedoch, dass ich anscheinend nicht beides hinbekomme $0
und ${PARSEDATA}
es nicht richtig erweitern kann. Entweder $0
funktioniert die Erweiterung mit einfachen Anführungszeichen einwandfrei, oder ${PARSEDATA}
die Erweiterung mit doppelten Anführungszeichen funktioniert, wird dann aber $0
zum Namen des Originalskripts, das diesen find
Befehl ausführt.
Antwort1
Ich bin mir nicht sicher, was Sie versuchen. Aber wenn Sie nach Skripten mit dem Namen check_* suchen und diese dann ausführen und durch ein Programm ${PARSE_DATA} leiten möchten, dann ist die von find gefundene Datei vermutlich nicht vorhanden, $0
aber{}
Beispiel
find /var/ftp/mp3 -name "*.mp3" -type f -exec chmod 644 {} \; (Wikipedia)
Ich denke also, dass Sie Ihre Anführungszeichen verwenden können:
find ${DATADIR} -name "check_*" -type f -exec sh -c '{} | ${PARSEDATA}' \; >> ${TMP_1}
Ich habe erfolgreich versucht:
PG='sed s/Blah/Bleh/'
find . -name "check_*" -type f -exec sh -c "{} | $PG" \;
> Bleh Blah
Antwort2
Behalten Sie die einfachen Anführungszeichen. Das Problem liegt höchstwahrscheinlich darin, dass Sie die Variable PARSEDATA nicht exportiert haben.
export PARSEDATA
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | ${PARSEDATA}' {} \; >> ${TMP_1}
Antwort3
Wenn Sie nicht möchten, dass $0 von der Shell erweitert wird (mit einfachen Anführungszeichen), aber ${PARSEDATA} erweitert wird, warum verwenden Sie dann nicht einfach für beides unterschiedliche Anführungszeichen:
find ${DATADIR} -name "check_*" -type f -exec sh -c '$0 | '"${PARSEDATA}" {} \; >> ${TMP_1}
Solange Sie die Anführungszeichen verbunden lassen, erweitert die Shell einfach ${PARSEDATA} und übergibt den gesamten Befehl als einzelnes zu suchendes Token.