Estoy haciendo un script de respaldo para ldap. Quiero que los errores vayan a un archivo en / var / log y que la salida vaya a otro archivo en la carpeta de copia de seguridad. Actualmente estoy redirigiendo a un archivo temporal y luego envío el archivo temporal al registro. Sin embargo, prefiero hacer esto como 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
¿Alguna idea sobre cómo redirigir stderr y stdout a diferentes tuberías para condensar este comando en 1 línea? ¿O hay un mejor camino?
Respuestas:
Como lo indica esta respuesta en Unix SE:
MyWeirdCommand.sh
testRedirection.sh:
Rendimientos corrientes:
stderr.log
6
stdout.log
1
fuente
En Bash, puede usar la sustitución de procesos para administrar los descriptores de archivo adicionales por usted. Puede encontrar esto un poco más ordenado que el método de intercambio de descriptor de archivo.
Su comando podría verse más o menos así:
fuente
>(process)
notación?Así es como imprimo stdout y stderr para separar archivos con marcas de tiempo (canalización a ts desde el paquete Debian moreutils):
PD: si no tienes ts, crea tu propio alias:
fuente