Saya membuat skrip cadangan untuk ldap. Saya ingin kesalahan untuk pergi ke file di / var / log dan output untuk pergi ke file lain di folder cadangan. Saat ini saya sedang mengarahkan kembali ke file temp dan kemudian mengirimkan file temp ke log. Saya lebih suka melakukan ini sebagai 1 liner sekalipun ...
/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
Ada ide tentang cara mengarahkan stderr dan stdout ke pipa yang berbeda untuk menyingkat perintah ini menjadi 1 baris? Atau ada cara yang lebih baik?
Jawaban:
Seperti yang ditunjukkan oleh jawaban ini di Unix SE:
MyWeirdCommand.sh
testRedirection.sh:
Hasil panen:
stderr.log
6
stdout.log
1
sumber
Di Bash, Anda bisa menggunakan subtitusi proses untuk mengelola deskriptor file tambahan untuk Anda. Anda mungkin menemukan ini sedikit lebih rapi daripada metode swap deskriptor file.
Perintah Anda mungkin terlihat seperti ini:
sumber
>(process)
notasi?Ini adalah bagaimana saya mencetak stdout dan stderr untuk memisahkan file dengan cap waktu (perpipaan ke ts dari paket moreutils Debian):
PS jika Anda tidak memiliki ts, buat alias sendiri:
sumber