Hoe onderdruk ik dd-uitvoer?

Ik heb een bash-script dat een bestand maakt met dd. Het probleem is dat dd een grote hoeveelheid output gooit die met de output van mijn script gaat rotzooien. Rondom zoekend heb ik een oplossing gevonden:

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

Is er een alternatief, of wordt doorverwezen naar /dev/null de enige manier?

Reacties

  • Ik ‘ ben verloren bij je laatste zin, ” het script mag niet om rechten vragen “. Dat lijkt ‘ t niets te maken te hebben met doorverwijzen naar /dev/null – je ‘ begint opnieuw omdat dd schrijftoegang nodig heeft tot /dev/r$temp1 (ik neem aan). U ‘ zult dat moeten doen, ongeacht hoe u dd ‘ s output; het omleiden van output naar /dev/null vereist geen ‘ root
  • Ik ‘ ben een idioot. Het geven van een bewerking is niet toegestaan vanwege het gebruik van / dev / r $ temp1 /. I

Het spijt me echt. Ik ‘ m een script aan het bewerken dat ‘ niet van mij is en ‘ t heb gemerkt . Het spijt me echt.

  • dus het probleem is dat een gewone gebruiker niet kan schrijven naar / dev / r $ temp1 of naar dev / null
  • Don ‘ maak je er geen zorgen over; Ik heb het een beetje bewerkt om het verwarrende gedeelte te verwijderen.
  • Als je ‘ geen van dd ‘ s gebruikt geavanceerde functies, gebruik in plaats daarvan cat, head of tail.
  • Antwoord

    Van de dd(1) man-pagina:

     status=noxfer suppress transfer statistics 

    dus:

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

    Dit geeft nog steeds de

    0+1 records in 0+1 records out 

    rotzooi wanneer dd wordt afgesloten, dus omleiden naar een gegevensverzameling is echt uw enige optie.

    Opmerkingen

    • dat was ik ‘ m bang voor.
    • Ik geloof dat status = noxfer gerelateerd kan zijn aan het SIGUSR1-signaal, dat normaal gesproken de overdracht laat zien statistiek. Ik ben echter niet bereid te testen of het ‘ klopt wat ik zeg.

    Antwoord

    status=none toevoegen:

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

    Van de 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.  

    Reacties

    • @roaima – gewoon nieuwsgierig, waarom een citaat van de man-pagina bewerken?
    • @don_crissti Ik voelde dat het (gebrek aan) context bij het extraheren van het citaat uit de man-pagina betekende dat het een iets andere vorm van woorden vereiste. Zoals het staat in de man-pagina , is het ‘ prima; hier zag het er vreemd uit.
    • @roaima – oké – nieuwsgierigheid tevreden 🙂 – maar merk op dat je een link naar de info page; het eerste antwoord hier had het exacte citaat van de man page . Ik zou rechtstreeks van de info pagina hebben gekopieerd / geplakt als de man pagina dubbelzinnig is, maar echt, aan jou … Oh, trouwens, heel erg bedankt voor je andere opmerking over mijn antwoord met betrekking tot sorteren op weekdag.
    • Lijkt niet ‘ t beschikbaar in dd (coreutils) 8.13: dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMO Dit zou het geaccepteerde antwoord moeten zijn

    Antwoord

    Voor toekomstig gebruik:

    Om de uitvoer van dd volledig te onderdrukken, stuurt u stderr volledig door naar / dev / null als volgt:

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

    Dit werkt goed als je bijvoorbeeld het proces wilt timen met het time-commando in bash en het resultaat aan een variabele wilt toewijzen, zonder de output te krijgen die dd produceert.

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

    Antwoord

    Zoiets zou ook voor u moeten werken met recente versies van BASH en ZSH:

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

    P.S. Dit is slechts een voorbeeld dat ik heb uitgevoerd …

    Answer

    Met elke Unix-applicatie of -commando kun je alle uitvoer onderdrukken met

    cmd >/dev/null 2>&1

    Het eerste bit leidt de standaarduitvoer (unitnummer 1) om naar / dev / null. Maar je hebt het tweede deel nodig om OOK de foutuitvoer (eenheid nummer 2) om te leiden naar dezelfde plaats als nummer 1.

    In UNIX, STDIN = 0, STDOUT = 1 en STDERR = 2


    Reacties

    • Eigenlijk stderr heeft de bestandsdescriptor 2 . (Ik neem aan dat ” STDERR = 3 ” slechts een typefout is.)
    • Het is niet wenselijk om alle uitvoer te onderdrukken . Als er een fout optreedt, zouden we graag de foutmelding zien.
    • cmd 2>logfile.txt lijkt meer aangepast

    Antwoord

    Als ik goed begrijp wat u probeert te doen, plaatst u dat sudo commando in het script en verwacht u het script dat om uw wachtwoord vraagt wanneer het daar wordt uitgevoerd? In dat geval doe je de dingen gewoon op de gecompliceerde manier.

    Een schonere oplossing is om het script op de gebruikelijke manier te schrijven (dwz zonder sudo) en voer het uit als de superuser . De reden hierachter is, als het script superuser-toegang nodig heeft, geef het dan gewoon de toegang (waarom wachten tot een bepaald commando?). Om in het script te controleren of het als root wordt uitgevoerd, doet u zoiets als dit:

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

    Reacties

    • nee. Dat ‘ is precies wat ik niet ‘ wil doen. Ik wil niet ‘ dat het script alleen als root wordt uitgevoerd omdat ik ‘ niet wil dat dd de uitvoer weergeeft. Uw controle zou correct zijn als ik wil dat het script wordt uitgevoerd als superuser.
    • @dierre Dus waarom had u in de eerste plaats sudo nodig? Normale gebruikers zouden dingen moeten kunnen omleiden naar /dev/null prima.
    • Ik ‘ m met Ubuntu en het ‘ s geeft mij een bewerking niet toegestaan … uhm …
    • Ik ‘ m sorry. Ik heb ‘ niet gemerkt dat ik iets aan het maken was onder / dev /. Het script is niet van mij, ik was het aan het bewerken. Het spijt me ‘ het spijt me echt.

    Antwoord

    je kunt stuur de uitvoer om naar een normaal bestand, dwz:

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

    Geef een reactie

    Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *