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
Het spijt me echt. Ik ‘ m een script aan het bewerken dat ‘ niet van mij is en ‘ t heb gemerkt . Het spijt me echt.
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 deman page
. Ik zou rechtstreeks van deinfo
pagina hebben gekopieerd / geplakt als deman
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
/dev/null
– je ‘ begint opnieuw omdatdd
schrijftoegang nodig heeft tot/dev/r$temp1
(ik neem aan). U ‘ zult dat moeten doen, ongeacht hoe udd
‘ s output; het omleiden van output naar/dev/null
vereist geen ‘ root