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 virkelig ked af det. Jeg ‘ redigerer et script, der ‘ ikke er mit og bemærkede det ikke ‘ . Virkelig ked af det.
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 framan page
. Jeg ville have kopieret / indsat direkte frainfo
-siden, hvisman
-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
/dev/null
– du ‘ genudforsker, fordidd
har brug for skriveadgang til/dev/r$temp1
(antager jeg). Du ‘ bliver nødt til at gøre det, uanset hvordan du undertrykkerdd
‘ s output; omdirigering af output til/dev/null
kræver ikke ‘ t root