Am un script bash care creează un fișier folosind dd
. Problema este că dd aruncă o cantitate mare de ieșire care se va deranja cu ieșirea scriptului meu. Căutând în jur, am găsit o soluție:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Există o alternativă sau redirecționează către /dev/null
singurul mod?
Comentarii
îmi pare rău. ‘ editez un script care ‘ nu este al meu și nu ‘ l-am observat . Îmi pare rău.
cat
, head
sau tail
în schimb. Răspuns
Din pagina de manual dd(1)
:
status=noxfer suppress transfer statistics
astfel:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Aceasta afișează încă
0+1 records in 0+1 records out
gunoi la ieșirea dd
, deci redirecționarea către un bazin de date este într-adevăr singura dvs. opțiune.
Comentarii
- care mi-a fost ‘ de care mă tem.
- Cred că status = noxfer, ar putea fi legat de semnalul SIGUSR1, care arată în mod normal transferul statistic. Cu toate acestea, nu sunt dispus să testez dacă este ‘ adevărat ceea ce spun.
Răspuns
Add status=none
:
dd if=boot1h of="/dev/r$temp1" status=none
Din 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.
Comentarii
- @roaima – doar curios, de ce editarea unui citat din pagina manuală?
- @don_crissti Am simțit că (lipsa) contextului în extragerea citatului din pagina manuală înseamnă că aceasta necesită o formă ușor diferită de cuvinte. Așa cum se află în pagina manual , ‘ este bine; aici părea ciudat.
- @roaima – în regulă – curiozitatea mulțumită 🙂 – dar rețineți că vă conectați la
info page
; răspunsul inițial de aici a avut citatul exact dinman page
. Aș fi copiat / lipit direct din paginainfo
dacă paginaman
este ambiguă, dar într-adevăr, depinde de dvs. … Oh, btw, mulțumesc pentru celălalt comentariu la răspunsul meu legat de sortarea în funcție de ziua săptămânii. - Nu ‘ pare să fie disponibil în dd (coreutils) 8.13:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Acesta ar trebui să fie răspunsul acceptat
Răspuns
Pentru referințe viitoare:
Pentru a suprima ieșirea dd redirecționează complet stderr către / dev / null astfel:
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
Acest lucru funcționează frumos dacă doriți, de exemplu, să cronometrați procesul folosind comanda time în bash și să atribuiți rezultatul unei variabile, fără a obține nicio ieșire pe care dd o produce.
referință: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Răspuns
Ceva ca acesta ar trebui să funcționeze și pentru dvs. cu versiunile recente de BASH și ZSH:
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. Acesta este doar un exemplu pe care l-am executat …
Răspuns
Cu orice aplicație sau comandă Unix, puteți suprima toate ieșirile cu
cmd >/dev/null 2>&1
Primul bit redirecționează ieșirea standard (numărul de unitate 1) la / dev / null. Dar aveți nevoie de a doua parte pentru a redirecționa, de asemenea, ieșirea de eroare (numărul unității 2) în același loc cu numărul 1.
În UNIX, STDIN = 0, STDOUT = 1 și STDERR = 2
Comentarii
- De fapt,
stderr
are descriptorul de fișier 2 . (Presupun că ” STDERR = 3 ” este doar o greșeală de scriere.) - Nu este de dorit să suprimăm toate rezultatele . Dacă apare o eroare, am dori să vedem mesajul de eroare.
-
cmd 2>logfile.txt
pare mai adaptat
Răspuns
Dacă înțeleg corect ce încercați să faceți, puneți acea comandă sudo
în script și așteptați scriptul pentru a vă solicita parola când rulează acolo? În acest caz, faceți lucrurile într-un mod complicat.
O soluție mai curată este să scrieți scriptul în modul obișnuit (adică fără sudo
) și rulați-l ca superutilizator . Motivul din spatele acestui lucru este că, dacă scriptul are nevoie de acces la superutilizator, atunci doar acordați-i accesul (de ce să așteptați până la o anumită comandă?). În script, pentru a verifica dacă rulează ca root faceți ceva de genul acesta:
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
Comentarii
- nu. Asta ‘ este exact ceea ce nu vreau să fac ‘. Nu ‘ nu vreau ca scriptul să fie rulat doar ca root deoarece nu vreau ‘ să vreau ca dd să afișeze ieșirea. Verificarea dvs. s-ar corecta dacă doresc ca scriptul să fie rulat ca superutilizator.
- @dierre Deci, de ce ați avut nevoie de
sudo
în primul rând? Utilizatorii normali ar trebui să poată redirecționa lucrurile către/dev/null
foarte bine. - Eu ‘ m folosind Ubuntu și ‘ îmi oferă operațiunea nu este permisă … uhm …
- Îmi ‘ îmi pare rău. ‘ nu am observat că creez ceva sub / dev /. Scenariul nu este al meu, l-am editat. Îmi ‘ îmi pare rău.
Răspunde
poți redirecționați ieșirea către un fișier obișnuit, adică:
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– vă ‘ re sudoing deoarecedd
are nevoie de acces la scriere la/dev/r$temp1
(presupun). ‘ va trebui să faceți acest lucru, indiferent de modul în care ați suprimadd
‘ ieșire; redirecționarea ieșirii către/dev/null
nu necesită ‘ rădăcină