Ho uno script bash che crea alcuni file utilizzando dd
. Il problema è che dd genera una grande quantità di output che comprometterà loutput del mio script. Cercando in giro ho trovato una soluzione:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Esiste unalternativa o sto reindirizzando a /dev/null
unico modo?
Commenti
mi dispiace davvero. Ho ‘ modificando uno script che ‘ non è mio e ‘ non lho notato . Mi dispiace davvero.
cat
, head
o tail
. Risposta
Dalla pagina man dd(1)
:
status=noxfer suppress transfer statistics
quindi:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Questo restituisce ancora
0+1 records in 0+1 records out
spazzatura quando dd
esce, quindi il reindirizzamento a un data sink è davvero lunica opzione.
Commenti
- che ero ‘ temevo.
- Credo che status = noxfer, potrebbe essere correlato al segnale SIGUSR1, che normalmente mostra il trasferimento statistica. Tuttavia, non sono disposto a verificare se ‘ è vero quello che sto dicendo.
Risposta
Aggiungi status=none
:
dd if=boot1h of="/dev/r$temp1" status=none
"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.
Commenti
- @roaima – solo curioso, perché modificare una citazione dalla pagina man?
- @don_crissti Ho sentito che la (mancanza di) contesto nellestrarre la citazione dalla pagina man significava che richiedeva una forma di parole leggermente diversa. Così comè nella pagina man , ‘ va bene; qui sembrava strano.
- @roaima – va bene – curiosità soddisfatta 🙂 – ma nota che ti colleghi al
info page
; la risposta iniziale qui aveva la citazione esatta daman page
. Avrei copiato / incollato direttamente dalla paginainfo
se la paginaman
fosse ambigua ma davvero, dipende da te … Oh, btw, grazie mille per il tuo altro commento sulla mia risposta relativa allordinamento per giorno della settimana. - Non ‘ sembra essere disponibile in dd (coreutils) 8.13:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Questa dovrebbe essere la risposta accettata
Risposta
Per riferimento futuro:
Per sopprimere loutput dd reindirizzare completamente stderr a / dev / null in questo modo:
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
Funziona bene se si desidera, ad esempio, cronometrare il processo utilizzando il comando time in bash e assegnare il risultato a una variabile, senza ottenere loutput prodotto da dd.
riferimento: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Risposta
Qualcosa di simile dovrebbe funzionare anche per te con le versioni recenti di BASH e ZSH:
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. Questo è solo un esempio che ho eseguito …
Risposta
Con qualsiasi applicazione o comando Unix, puoi sopprimere tutto loutput con
cmd >/dev/null 2>&1
Il primo bit reindirizza lo standard output (unità numero 1) a / dev / null. Ma è necessaria la seconda parte ANCHE per reindirizzare loutput dellerrore (unità numero 2) nello stesso punto del numero 1.
In UNIX, STDIN = 0, STDOUT = 1 e STDERR = 2
Commenti
- In realtà,
stderr
ha il descrittore di file 2 . (Presumo che ” STDERR = 3 ” sia solo un errore di battitura.) - Non è consigliabile sopprimere tutto loutput . Se si verifica un errore, vorremmo vedere il messaggio di errore.
-
cmd 2>logfile.txt
sembra più adattato
Rispondi
Se capisco correttamente cosa stai cercando di fare, stai inserendo il comando sudo
nello script e ti aspetti lo script per richiedere la password quando viene eseguito lì? In tal caso stai facendo le cose in modo complicato.
Una soluzione più pulita è scrivere lo script nel modo usuale (cioè senza sudo
) e eseguilo come superutente . Il motivo è che, se lo script necessita dellaccesso come superutente, concedigli laccesso (perché aspettare fino a un certo comando?). Nello script, per verificare se viene eseguito come root, eseguire una procedura simile:
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
Commenti
- no. Questo ‘ è esattamente quello che ‘ non voglio fare. Non ‘ voglio che lo script venga eseguito come root solo perché ‘ non voglio che dd visualizzi loutput. Il tuo controllo verrebbe corretto se voglio che lo script venga eseguito come superutente.
- @dierre Allora perché hai bisogno di
sudo
in primo luogo? Gli utenti normali dovrebbero essere in grado di reindirizzare le cose a/dev/null
benissimo. - I ‘ m usando Ubuntu e ‘ mi sta dando operazione non consentita … uhm …
- Mi ‘ mi dispiace. ‘ non ho notato che stavo creando qualcosa in / dev /. Lo script non è mio, lo stavo modificando. ‘ mi dispiace davvero.
Rispondi
puoi reindirizza loutput a un file normale, ad esempio:
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– ‘ reindirizzamento perchédd
necessita dellaccesso in scrittura a/dev/r$temp1
(presumo). ‘ dovrai farlo indipendentemente da come sopprimidd
‘ s output; il reindirizzamento delloutput a/dev/null
‘ non richiede root