Van egy bash szkriptem, amely létrehoz egy fájlt a dd
segítségével. A probléma az, hogy a dd nagy mennyiségű kimenetet dob, ami összezavarodik a szkript kimenetével. Keresés a környéken “megoldást találtam:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Van alternatíva, vagy átirányítom a /dev/null
egyetlen út?
Megjegyzések
nagyon sajnálom. ‘ m olyan szkriptet szerkesztek, amely ‘ nem az enyém, és nem figyelt ‘ észre . Nagyon sajnálom.
cat
, head
vagy tail
. Válasz
A dd(1)
man oldalról:
status=noxfer suppress transfer statistics
így:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Ez még mindig a
0+1 records in 0+1 records out
szemetet, amikor dd
kilép, ezért az egyetlen lehetőség az átirányítás egy adatmosogatóra.
Megjegyzések
- ettől féltem ‘.
- Úgy gondolom, hogy a status = noxfer összefüggésbe hozható a SIGUSR1 jelzéssel, amely általában megmutatja az átvitelt statisztikai. Hoewever, nem vagyok hajlandó tesztelni, hogy ‘ igaz-e, amit mondok.
Válasz
status=none
hozzáadása:
dd if=boot1h of="/dev/r$temp1" status=none
A dd (coreutils) 8.21 dokumentumok :
"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.
Megjegyzések
- @roaima – csak kíváncsi, miért szerkesztek egy idézetet a man oldalról?
- @don_crissti Úgy éreztem, hogy a szövegkörnyezet (hiánya) az idézet kézikönyvből való kivonásakor azt jelenti, hogy ehhez kissé más szavakra van szükség. A man oldalon állva ‘ s rendben van; itt furcsán nézett ki.
- @roaima – minden rendben – a kíváncsiság elégedett 🙂 – de vegye figyelembe, hogy linkel az
info page
linkre; az itteni kezdeti válasz megadta a pontos idézetet aman page
címről. Másoltam volna / illesztettem volna közvetlenül ainfo
oldalról, ha aman
oldal kétértelmű, de tényleg, rajtad múlik … Ó, btw, köszönöm szépen a hétnapi rendezéssel kapcsolatos válaszomhoz fűzött másik megjegyzésemet. - Úgy tűnik, hogy a dd (coreutils) 8.13-ban nem érhetők el ‘ t:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Ez legyen az elfogadott válasz
Válasz
Jövőbeni felhasználásra:
A dd kimenet elnyomásához teljesen átirányítja a stderr-t a / dev / null-ra így:
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
Ez akkor működik, ha például a bash-ban lévő time paranccsal szeretné időzíteni a folyamatot, és az eredményt egy változóhoz rendelni, anélkül, hogy megkapná a dd által előállított kimenetet.
referencia: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Válasz
Valami ilyesmi működhet a BASH és a ZSH legújabb verzióival is:
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. Ez csak egy példa, amelyet futtattam.
cmd >/dev/null 2>&1
Az első bit átirányítja a standard kimenetet (1. egységszám) a / dev / null fájlba. De a második részre is szükség van, hogy a hibakimenetet (2. egységszám) átirányítsa ugyanarra a helyre, mint az 1. szám.
UNIX-ban az STDIN = 0, STDOUT = 1 és STDERR = 2
Megjegyzések
- Valójában
stderr
fájlleírója 2 . (Feltételezem, hogy ” STDERR = 3 ” csak elírás.) - Nem kívánatos az összes kimenetet elnyomni . Ha hiba lép fel, szeretnénk látni a hibaüzenetet.
-
cmd 2>logfile.txt
úgy tűnik, hogy jobban alkalmazkodik
Válasz
Ha jól értem, mit próbál tenni, akkor beírja-e azt a sudo
parancsot a szkriptbe, és várja-e a parancsfájl, amely megkéri a jelszavát, amikor ott fut? Ebben az esetben csak bonyolult módon csinálod a dolgokat.
Tisztább megoldás az, ha a szkriptet a szokásos módon (azaz sudo
nélkül) írod és futtassa superuserként . Ennek oka az, hogy ha a szkriptnek superuser hozzáférésre van szüksége, akkor csak adja meg neki a hozzáférést (miért várjon egy bizonyos parancsig?). A parancsfájlban ellenőrizze, hogy root-ként fut-e, ehhez hasonlóan:
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
Megjegyzések
- nem. Ez ‘ pontosan az, amit nem akarok ‘ tenni. Nem ‘ nem akarom, hogy a parancsfájl csak rootként fusson, mert nem akarom, hogy a dd megjelenítse a kimenetet. Az Ön ellenőrzése kijavítaná, ha azt akarom, hogy a szkript superuser-ként fusson.
- @dierre Tehát miért kellett először a
sudo
? A normál felhasználóknak képesnek kell lenniük a div div id = “99a256109d”>
-re való átirányításra.
Válasz
irányítsa át a kimenetet egy normál fájlba, azaz:
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– Ön ‘ újra sudoing, mertdd
írási hozzáférésre van szüksége a/dev/r$temp1
(feltételezem). ‘ ezt meg kell tennie, függetlenül attól, hogy elnyomja add
‘ kimenet; a kimenet átirányítása a/dev/null
oldalra nem igényel ‘ li>