Pregunta Ocultar resultados de trabajo interno mediante script de shell


Hago un script de shell que puede actualizar una herramienta. Quiero eso cuando ejecuto el

root@host:# sh script.sh

entonces la salida será

Its installing
Its done

Pero ahora mi script parece

root @ host: # sh script.sh
  Su instalación
 Mostrando resultados de trabajo de guiones internacionales
 Sus   hecho

Que yo sé stty -echo comando ocultar stdin en la terminal y stty echo habilitar stdin show en la terminal. Pero, ¿cómo puedo ocultar el resultado Stander por script de shell?


1


origen


La salida no deseada se puede redirigir a /dev/null, o a un archivo en caso de que lo necesite para diagnósticos posteriores. - AFH
tldp.org/guides.html -> Dos guías sobre programación de bash. Estos responderán todas sus preguntas. - Hannu
@AFH. Intento redirigir / dev / null pero fallé. - Mastan
compruebe si tiene en la primera línea algo así como: #! / bin / bash -x y si es sí, elimine -x - Romeo Ninov
No usa el símbolo de tubería con redirección: su comando debe ser mv /root/Desktop/lynis/plugins/* /etc/lynis/plugins/ &>/dev/null. El símbolo de tubería envía la salida a la entrada de otro programa; la redirección envía la salida a un archivo: no se pueden hacer ambas cosas (aunque el programa al que se envía la salida puede tener su propia salida redirigida, como en prog1 | prog2 &> file3) - AFH


Respuestas:


Redireccione tanto stdout como stderr a /dev/null:

> /dev/null 2>&1

O en bash:

&> /dev/null

Puede hacerlo para todos los programas generados por su script mediante el uso de exec con la redirección al comienzo de su script.

exec > /dev/null 2>&1

A menos que los programas que invoque en su script accedan directamente a la terminal (raro), esto debería cubrirlo.

Una nota sobre las redirecciones: El orden importa Necesita ser > /dev/null 2>&1NO 2>&1 >/dev/null. Yo solía pensar que esto último funcionaría porque > parece una flecha que me hace pensar en punteros (como lo hace la palabra "redirigir"), y si apunto stderr a stdout y luego apunto stdout a / dev / null, entonces ambos deberían apuntar a / dev / null. Ese no es el caso, sin embargo. Los descriptores de archivo no son punteros y es más útil pensar en > como una especie de asignación a un descriptor de archivo en lugar de señalar. (Más o menos, porque técnicamente, un fd es solo un número y necesitas funciones del sistema como dup2 para abrir un archivo diferente en el mismo descriptor de archivo; pero creo que la asignación es una buena abstracción de alto nivel).


1