Hogyan lehet elnyomni a dd kimenetet?

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

  • I ‘ elvesztettem az utolsó mondatot, ” a parancsfájlnak nem szabad privilégiumokat kérnie “. Úgy tűnik, hogy ennek ‘ nincs köze átirányítás ide: /dev/null – Ön ‘ újra sudoing, mert dd í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 a dd ‘ kimenet; a kimenet átirányítása a /dev/null oldalra nem igényel ‘ li>
  • I ‘ idióta vagyok. A / dev / r $ temp1 / használata miatt nem engedélyezett a művelet. I

nagyon sajnálom. ‘ m olyan szkriptet szerkesztek, amely ‘ nem az enyém, és nem figyelt ‘ észre . Nagyon sajnálom.

  • tehát a probléma az, hogy a rendszeres felhasználó nem írhat a / dev / r $ temp1 vagy a dev / null fájlokba
  • Don ‘ ne aggódj emiatt; Kicsit szerkesztettem a zavaros rész eltávolítására
  • Ha ‘ nem használ semmit a dd ‘ speciális funkciók helyett használja a következőt: 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 a man page címről. Másoltam volna / illesztettem volna közvetlenül a info oldalról, ha a man 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.

  • I ‘ m az Ubuntu és az it használatával ‘ s a művelet megadása nem megengedett … uhm …
  • Sajnálom. ‘ Sajnálom. Nem vettem észre ‘, hogy a / dev / alatt létrehozok valamit. A forgatókönyv nem az enyém, én szerkesztettem. ‘ sajnálom.
  • Válasz

    irányítsa át a kimenetet egy normál fájlba, azaz:

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

    Vélemény, hozzászólás?

    Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük