Cum suprim ieșirea dd?

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

  • Am ‘ pierdut la ultima propoziție, ” scriptul nu ar trebui să solicite privilegii „. Asta nu pare să aibă nimic de-a face cu ‘ redirecționarea către /dev/null – vă ‘ re sudoing deoarece dd 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 suprima dd ‘ ieșire; redirecționarea ieșirii către /dev/null nu necesită ‘ rădăcină
  • Sunt ‘ un idiot. Operația nu era permisă din cauza utilizării / dev / r $ temp1 /. I

îmi pare rău. ‘ editez un script care ‘ nu este al meu și nu ‘ l-am observat . Îmi pare rău.

  • deci problema este obișnuită, utilizatorul nu poate scrie în / dev / r $ temp1 sau în dev / null
  • Nu ‘ nu vă faceți griji; Am editat-o puțin pentru a elimina partea confuză
  • Dacă ‘ nu utilizați niciunul dintre dd ‘ funcții avansate, utilizați 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 din man page . Aș fi copiat / lipit direct din pagina info dacă pagina man 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 

    Lasă un răspuns

    Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *