Haben Sie eine Anzahl von Dateien in einem Verzeichnis, das ich verarbeiten möchte. Jede Datei hat einen Namen, den ich verwenden muss, um einen NAME-Wert festzulegen, und jede Datei enthält eine Liste von IP-Adressen, an denen ich etwas tun muss.Bash While Read
#!/bin/bash
TMPDIR=/usr/customer/scripts/tmp
ip_targets(){
OLD_IFS=$IFS
while IFS= read -r file_name; do
log "This is: $file_name"
done < "$(find "$TMPDIR" -regex '.*.vms$')"
IFS=$OLD_IFS
}
ip_targets
Wenn ich laufen:
$find /usr/customer/scripts/tmp -regex '.*.vms$'
ich:
/usr/customer/scripts/tmp/XXX.vms
/usr/customer/scripts/tmp/YYY.vms
von denen jeder hat eine Liste von IP-Adressen.
Wenn ich das Skript ausführen, erhalte ich:
$ bash -x tester.sh
+ TMPDIR=/usr/customer/scripts/tmp
+ ip_targets
+ OLD_IFS='
'
++ find /usr/customer/scripts/tmp -regex '.*.vms$'
++ find /usr/customer/scripts/tmp -regex '.*.vms$'
tester.sh: line 4: /usr/customer/scripts/tmp/XXX.vms
/usr/customer/scripts/tmp/YYY.vms: No such file or directory
+ IFS='
'
Erstens würde Ich mag Lage sein, den Namen ohne Pfad nur die Datei zu übergeben, noch Verlängerung.
Zweitens möchte ich einen weiteren Abschnitt hinzufügen, der dann ermöglicht, einen Befehl an jede der IPs in jeder Datei ausgegeben werden.
könnten Sie einfach 'cat/Benutzer/Kunde/Skripte/tmp/*. vms |, damit Sie nicht mit Loops affen müssen? –
JNevill
@JNevill - Ich muss wirklich verstehen, wie man es während des Lesens macht, da die eigentliche Sache, die ich tun muss, nicht so einfach ist. – dross
Da Sie 'while IFS =' verwenden, brauchen Sie 'OLD_IFS' nicht. –