3 Stimmen

Verwendung eines Platzhalters als Befehlszeilenargument in der Bash

Ich versuche, ein Bash-Skript zu schreiben, um eine Reihe von Dateien zu konvertieren.

Angenommen, ich habe ein Verzeichnis /path/to/my files/ mit drei Textdateien: a b.txt , c d.txt y e.txt (beachten Sie die Leerzeichen)

Ich muss in der Lage sein, das Skript wie folgt aufzurufen:

$ ./myscript.sh /path/to/my\ files/*.txt

und dann in der Bash in einer Schleife durchlaufen, um sie wie folgt zu verarbeiten:

dest='/desktop/'
for ARG in $@; do
  /some/other/script $ARG $dest$ARG.new
done

Es muss nicht genau so funktionieren, aber das, was am einfachsten ist und ähnliche Ergebnisse bringt

5voto

linuts Punkte 6412

Erfüllt dies Ihre Anforderungen:

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$ARG.new"
done

EDIT: So entfernen Sie den Pfad auf ARG

dest='/desktop/'
for ARG in "$@"; do
  /some/other/script "$ARG" "$dest$(basename "$ARG").new"
done

1voto

Karoly Horvath Punkte 91548

Die Bash führt vor der Ausführung des Befehls eine Wildcard-Expansion durch, d.h. sie ersetzt den Ausdruck durch eine Liste passender Dateien.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X