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
Lo siento mucho. Estoy ‘ editando un script que ‘ no es mío y no ‘ no lo noté . Lo siento mucho.
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 laman page
. Habría copiado / pegado directamente desde la páginainfo
si la páginaman
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
/dev/null
– ‘ estás haciendo esto porquedd
necesita acceso de escritura a/dev/r$temp1
(supongo). Usted ‘ tendrá que hacerlo sin importar cómo suprimadd
‘ s salida; redireccionando la salida a/dev/null
no ‘ t requiere root