Hvordan undertrykker jeg dd-output?

Jeg har et bash-script, der opretter en fil ved hjælp af dd. Problemet er, at dd kaster en stor mængde output, der kommer til at rod med output fra mit script. Søgning rundt Jeg har fundet en løsning:

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

Er der et alternativ, eller omdirigeres til /dev/null eneste måde?

Kommentarer

  • Jeg ‘ er tabt på din sidste sætning, ” scriptet skal ikke anmode om rettigheder “. Det ser ikke ud til ‘ at have noget at gøre med omdirigering til /dev/null – du ‘ genudforsker, fordi dd har brug for skriveadgang til /dev/r$temp1 (antager jeg). Du ‘ bliver nødt til at gøre det, uanset hvordan du undertrykker dd ‘ s output; omdirigering af output til /dev/null kræver ikke ‘ t root
  • Jeg ‘ er en idiot. Det var at give operation ikke tilladt på grund af brugen af / dev / r $ temp1 /. I

jeg er virkelig ked af det. Jeg ‘ redigerer et script, der ‘ ikke er mit og bemærkede det ikke ‘ . Virkelig ked af det.

  • så problemet er, at almindelig bruger ikke kan skrive til / dev / r $ temp1 eller til dev / null
  • Don ‘ t bekymre dig om det; Jeg redigerede det lidt for at fjerne den forvirrende del
  • Hvis du ‘ ikke bruger nogen af dd ‘ s avancerede funktioner, brug cat, head eller tail i stedet.
  • Svar

    Fra dd(1) man-siden:

     status=noxfer suppress transfer statistics 

    således:

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

    Dette udsender stadig

    0+1 records in 0+1 records out 

    affald, når dd afsluttes, så omdirigering til et datasink er virkelig din eneste mulighed.

    Kommentarer

    • det var jeg ‘ er bange for.
    • Jeg tror status = noxfer, kunne være relateret til SIGUSR1 signal, der normalt viser overførslen statistik. Jeg er dog ikke villig til at teste, om det ‘ stemmer, hvad jeg siger.

    Svar

    Tilføj status=none:

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

    Fra 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.  

    Kommentarer

    • @roaima – bare nysgerrig, hvorfor redigere et citat fra mandsiden?
    • @don_crissti Jeg følte (manglen på) konteksten ved at udtrække citatet fra mandsiden betyde, at det krævede en lidt anden form for ord. Som det står på man-siden , er det ‘ fint; her så det underligt ud.
    • @roaima – okay – nysgerrighed tilfreds 🙂 – men bemærk at du linker til info page; det oprindelige svar her havde det nøjagtige citat fra man page . Jeg ville have kopieret / indsat direkte fra info -siden, hvis man -siden er tvetydig, men virkelig op til dig … Åh, btw, meget tak for din anden kommentar til mit svar relateret til sortering efter ugedag.
    • Synes ‘ ikke at være tilgængelig i dd (coreutils) 8.13: dd: invalid status flag: `none' Try `dd --help' for more information.
    • IMO Dette skal være det accepterede svar

    Svar

    Til fremtidig reference:

    For at undertrykke dd-output omdirigeres stderr helt til / dev / null som sådan:

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

    Dette fungerer pænt, hvis du f.eks. vil tidsforhandle processen ved hjælp af tidskommandoen i bash og tildele resultatet til en variabel uden at få noget af det output, som dd producerer.

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

    Svar

    Noget som dette skal også fungere for dig med nyere versioner af BASH og ZSH:

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

    P.S. Dette er bare et eksempel, jeg løb …

    Svar

    Med ethvert Unix-program eller kommando kan du undertrykke al output med

    cmd >/dev/null 2>&1

    Den første bit omdirigerer standardoutputtet (enhedsnummer 1) til / dev / null. Men du har brug for den anden del for også at omdirigere fejloutputtet (enhed nummer 2) til samme sted som nummer 1.

    I UNIX er STDIN = 0, STDOUT = 1 og STDERR = 2


    Kommentarer

    • Faktisk stderr har filbeskrivelsen 2 . (Jeg antager, at ” STDERR = 3 ” er bare en skrivefejl.)
    • Det er uønsket at undertrykke al output . Hvis der opstår en fejl, vil vi gerne se fejlmeddelelsen.
    • cmd 2>logfile.txt synes mere tilpasset

    Svar

    Hvis jeg forstår rigtigt, hvad du prøver at gøre, lægger du den sudo kommando i scriptet og forventer scriptet til at bede om dit kodeord, når det kører der? I så fald gør du bare tingene på den komplicerede måde.

    En renere løsning er at skrive scriptet på den sædvanlige måde (dvs. uden sudo) og kør det som superbruger . Årsagen bag dette er, at hvis scriptet har brug for superbrugeradgang, skal du bare give det adgang (hvorfor vente til en bestemt kommando?). I scriptet skal du kontrollere, om det køres som root, ved at gøre noget som dette:

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

    Kommentarer

    • nej. At ‘ er nøjagtigt hvad jeg ikke ‘ ikke vil gøre. Jeg ønsker ikke ‘ t, at scriptet kun skal køres som root, fordi jeg ikke ‘ ikke ønsker, at dd skal vise output. Din check ville rette sig, hvis jeg vil have, at scriptet skal køres som superbruger.
    • @dierre Så hvorfor havde du i første omgang brug for sudo? Normale brugere skal være i stand til at omdirigere ting til /dev/null helt fint.
    • Jeg ‘ m ved hjælp af Ubuntu og det ‘ s giver mig handling ikke tilladt … uhm …
    • Jeg ‘ undskyld. Jeg ‘ lagde ikke mærke til, at jeg oprettede noget under / dev /. Scriptet er ikke mit, jeg redigerede det. Jeg ‘ er virkelig ked af det.

    Svar

    du kan omdirigere output til en almindelig fil, dvs.:

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

    Skriv et svar

    Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *