Ich mache ein Backup-Skript für ldap. Ich möchte, dass die Fehler in eine Datei in / var / log und die Ausgabe in eine andere Datei im Sicherungsordner verschoben werden. Derzeit leite ich zu einer temporären Datei um und sende die temporäre Datei dann an das Protokoll. Ich mache das aber lieber als 1 Liner ...
/usr/bin/ldapsearch -x -LLL -b "dc=contoso,dc=com" "(objectclass=*)" -h ldap.server -v 2>>/tmp/ldaptmp.err |
gzip -c > /mnt/backups/ldap/`date +\%Y\%m\%d`.ldif.gz ||
logger -t ldapbackup -p local6.err error exit $?
cat /tmp/ldaptmp.err | grep -v "ldap_initialize( ldap://ldap.server )" |
grep -v "filter: (objectclass=\*)" |
grep -v "requesting: All userApplication attributes" >$ERR_LOG
rm -f /tmp/ldaptmp.err
Irgendwelche Ideen, wie man stderr und stdout in verschiedene Pipes umleitet, um diesen Befehl in einer Zeile zusammenzufassen? Oder gibt es einen besseren Weg?
Antworten:
Wie aus dieser Antwort bei Unix SE hervorgeht:
MyWeirdCommand.sh
testRedirection.sh:
Laufende Erträge:
stderr.log
6
stdout.log
1
quelle
In Bash können Sie die Prozessersetzung verwenden, um die zusätzlichen Dateideskriptoren für Sie zu verwalten. Möglicherweise sieht dies etwas ordentlicher aus als die Dateideskriptor-Austauschmethode.
Ihr Befehl könnte ungefähr so aussehen:
quelle
>(process)
Notation?So drucke ich stdout und stderr, um Dateien mit Zeitstempeln zu trennen (Weiterleitung an ts aus dem Debian moreutils-Paket):
PS Wenn Sie keine ts haben, erstellen Sie Ihren eigenen Alias:
quelle