Jeg har et bash-skript som lager en fil ved hjelp av dd
. Problemet er at dd kaster mye produksjon som kommer til å rote med utdataene fra skriptet mitt. Ved å søke rundt har jeg funnet en løsning:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Er det et alternativ, eller omdirigerer til /dev/null
eneste måten?
Kommentarer
jeg er veldig lei meg. Jeg ‘ redigerer et skript som ‘ ikke er mitt og la ikke merke til det ‘ . Beklager.
cat
, head
eller tail
i stedet. Svar
Fra dd(1)
man-siden:
status=noxfer suppress transfer statistics
thus:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Dette gir fremdeles ut
0+1 records in 0+1 records out
søppel når dd
går ut, så omdirigering til et datasink er virkelig det eneste alternativet.
Kommentarer
- det var jeg ‘ er redd for.
- Jeg tror status = noxfer, kan være relatert til SIGUSR1 signal, som normalt viser overføringen statistikk. Jeg er ikke villig til å teste om det ‘ stemmer hva jeg sier.
Svar
Legg til 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 nysgjerrig, hvorfor redigere et sitat fra mannssiden?
- @don_crissti Jeg følte (mangel på) kontekst i å trekke ut sitatet fra mannssiden, betyr at det krevde en litt annen form for ord. Slik det står på man-siden er det ‘ greit; her så det rart ut.
- @roaima – ok – nysgjerrighet fornøyd 🙂 – men merk at du lenker til
info page
; det opprinnelige svaret her hadde det eksakte sitatet framan page
. Jeg ville ha kopiert / limt inn direkte frainfo
-siden hvisman
-siden er tvetydig, men egentlig opp til deg … Å, btw, tusen takk for den andre kommentaren din på svaret mitt knyttet til sortering etter ukedag. - Ser det ikke ut ‘ å være tilgjengelig i dd (coreutils) 8.13:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Dette skal være det aksepterte svaret
Svar
For fremtidig referanse:
For å undertrykke dd-utdata omdirigere stderr til / dev / null slik:
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
Dette fungerer fint hvis du for eksempel ønsker å prosessere tid ved å bruke tidskommandoen i bash og tildele resultatet til en variabel, uten å få noe av utdataene som dd produserer.
referanse: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Svar
Noe som dette skal også fungere for deg med nyere versjoner av 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 kjørte …
Svar
Med et hvilket som helst Unix-program eller en kommando kan du undertrykke all utdata med
cmd >/dev/null 2>&1
Den første biten omdirigerer standardutgangen (enhetsnummer 1) til / dev / null. Men du trenger den andre delen for også å omdirigere feilutgangen (enhet nummer 2) til samme sted som nummer 1.
I UNIX, STDIN = 0, STDOUT = 1 og STDERR = 2
Kommentarer
- Egentlig
stderr
har filbeskrivelsen 2 . (Jeg antar at » STDERR = 3 » er bare en skrivefeil.) - Det er uønsket å undertrykke all produksjon . Hvis det oppstår en feil, vil vi se feilmeldingen.
-
cmd 2>logfile.txt
virker mer tilpasset
Svar
Hvis jeg forstår riktig hva du prøver å gjøre, legger du den sudo
kommandoen inn i skriptet og forventer skriptet for å be om passordet ditt når det kjører der? I så fall gjør du bare ting på den kompliserte måten.
En renere løsning er å skrive skriptet på vanlig måte (dvs. uten sudo
) og kjør den som superbruker . Årsaken bak dette er at hvis skriptet trenger tilgang til superbruker, så bare gi det tilgangen (hvorfor vente til en bestemt kommando?). For å sjekke om det kjøres som root, gjør du noe som dette i skriptet:
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
Kommentarer
- nei. At ‘ er akkurat det jeg ikke ‘ ikke vil gjøre. Jeg vil ikke ‘ t vil at skriptet skal kjøres som rot bare fordi jeg ikke ‘ t vil at dd skal vise utdataene. Sjekken din vil korrigere hvis jeg vil at skriptet skal kjøres som superbruker.
- @dierre Så hvorfor trengte du i første omgang
sudo
? Normale brukere skal kunne omdirigere ting til/dev/null
helt fint. - Jeg ‘ m bruker Ubuntu og det ‘ s gir meg operasjon ikke tillatt … uhm …
- Jeg ‘ beklager. Jeg la ikke ‘ ikke merke til at jeg opprettet noe under / dev /. Manuset er ikke mitt, jeg redigerte det. Jeg ‘ beklager virkelig.
Svar
du kan omdirigere utdata til en vanlig fil, dvs.:
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– du ‘ sudoing fordidd
trenger skrivetilgang til/dev/r$temp1
(antar jeg). Du ‘ kommer til å trenge å gjøre det uansett hvordan du undertrykkerdd
‘ s output; omdirigering av output til/dev/null
krever ikke ‘ t root