¿Cómo suprimo la salida dd?

Tengo un script bash que crea un archivo usando dd. El problema es que dd arroja una gran cantidad de salida que va a alterar la salida de mi script. Buscando, he encontrado una solución:

dd if=boot1h of="/dev/r$temp1" >& /dev/null 

¿Existe una alternativa o se está redireccionando a /dev/null el

Comentarios

  • Estoy ‘ perdido en su última oración, » el script no debería solicitar privilegios «. Eso no ‘ parece tener nada que ver con Redirigiendo a /dev/null – ‘ estás haciendo esto porque dd necesita acceso de escritura a /dev/r$temp1 (supongo). Usted ‘ tendrá que hacerlo sin importar cómo suprima dd ‘ s salida; redireccionando la salida a /dev/null no ‘ t requiere root
  • Yo ‘ soy un idiota. Estaba dando una operación no permitida debido al uso de / dev / r $ temp1 /. I

Lo siento mucho. Estoy ‘ editando un script que ‘ no es mío y no ‘ no lo noté . Lo siento mucho.

  • el problema es que el usuario normal no puede escribir en / dev / r $ temp1 o dev / null
  • Don ‘ no te preocupes por eso; Lo edité un poco para eliminar la parte confusa
  • Si ‘ no estás usando ninguno de los dd ‘ s funciones avanzadas, utilice cat, head o tail en su lugar.
  • Respuesta

    De la página de manual dd(1):

     status=noxfer suppress transfer statistics 

    así:

    dd if=boot1h of="/dev/r$temp1" status=noxfer 

    Esto todavía genera el

    0+1 records in 0+1 records out 

    basura cuando dd sale, por lo que redirigir a un receptor de datos es realmente su única opción.

    Comentarios

    • de eso ‘ tengo miedo.
    • Creo que status = noxfer, podría estar relacionado con la señal SIGUSR1, que normalmente muestra la transferencia estadística. Sin embargo, no estoy dispuesto a probar si ‘ es cierto lo que estoy diciendo.

    Respuesta

    Agregue status=none:

    dd if=boot1h of="/dev/r$temp1" status=none 

    Desde dd (coreutils) 8.21 docs :

     "status=LEVEL" Transfer information is normally output to stderr upon receipt of the "INFO" signal or when "dd" exits. Specifying LEVEL will adjust the amount of information printed, with the last LEVEL specified taking precedence. "none" Do not print any informational or warning messages to stderr. Error messages are output as normal. "noxfer" Do not print the final transfer rate and volume statistics that normally make up the last status line. "progress" Print the transfer rate and volume statistics on stderr, when processing each input block. Statistics are output on a single line at most once every second, but updates can be delayed when waiting on I/O.  

    Comentarios

    • @roaima – solo curiosidad, ¿Por qué editar una cita de la página de manual?
    • @don_crissti Sentí que la (falta de) contexto al extraer la cita de la página de manual significaba que requería una forma de palabras ligeramente diferente. Tal como está en la página de manual , ‘ está bien; aquí se veía extraño.
    • @roaima – de acuerdo – curiosidad satisfecha 🙂 – pero tenga en cuenta que se enlaza al info page; la respuesta inicial aquí tenía la cita exacta de la man page . Habría copiado / pegado directamente desde la página info si la página man es ambigua, pero en realidad, depende de usted … Oh, Por cierto, muchas gracias por su otro comentario sobre mi respuesta relacionada con la clasificación por día de la semana.
    • ¿No ‘ parece estar disponible en dd (coreutils) 8.13: dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMO Esta debería ser la respuesta aceptada

    Respuesta

    Para referencia futura:

    Para suprimir la salida de dd, redirija completamente stderr a / dev / null así:

    dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null 

    Esto funciona muy bien si desea, por ejemplo, cronometrar el proceso usando el comando time en bash y asignar el resultado a una variable, sin obtener ninguno de los resultados que produce dd.

    referencia: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html

    Respuesta

    Algo como esto también debería funcionar para usted con versiones recientes de BASH y ZSH:

    dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null 

    P.D. Este es solo un ejemplo que ejecuté …

    Respuesta

    Con cualquier aplicación o comando Unix, puede suprimir toda la salida con

    cmd >/dev/null 2>&1

    El primer bit redirige la salida estándar (unidad número 1) a / dev / null. Pero necesita la segunda parte para redirigir TAMBIÉN la salida de error (unidad número 2) al mismo lugar que el número 1.

    En UNIX, STDIN = 0, STDOUT = 1 y STDERR = 2


    Comentarios

    • En realidad, stderr tiene el descriptor de archivo 2 . (Supongo que » STDERR = 3 » es solo un error tipográfico).
    • No es deseable suprimir toda la salida . Si ocurre un error, nos gustaría ver el mensaje de error.
    • cmd 2>logfile.txt parece más adaptado

    Responder

    Si entiendo correctamente lo que está tratando de hacer, ¿está poniendo ese comando sudo en el script y esperando el script para solicitar su contraseña cuando se ejecuta allí? En ese caso, solo está haciendo las cosas de manera complicada.

    Una solución más limpia es escribir el script de la manera habitual (es decir, sin sudo) y ejecútalo como superusuario . La razón detrás de esto es, si el script necesita acceso de superusuario, entonces simplemente concédalo (¿por qué esperar hasta un comando determinado?) En el script, para comprobar si se está ejecutando como root, haga algo como esto:

    if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi 

    Comentarios

    • nop. Eso ‘ es exactamente lo que ‘ no quiero hacer. No ‘ no quiero que el script se ejecute como root solo porque no ‘ no quiero que dd muestre el resultado. Su verificación sería correcta si quiero que el script se ejecute como superusuario.
    • @dierre Entonces, ¿por qué necesita sudo en primer lugar? Los usuarios normales deberían poder redirigir las cosas a /dev/null sin problemas.
    • Yo ‘ estoy usando Ubuntu y ‘ s me da operación no permitida … uhm …
    • Lo ‘ lo siento. No ‘ t noté que estaba creando algo bajo / dev /. El guión no es mío, lo estaba editando. ‘ realmente lo siento.

    Responder

    puedes redirigir la salida a un archivo normal, es decir:

     dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log 

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *