Minulla on bash-komentosarja, joka luo tiedoston tiedostoon dd
. Ongelma on, että dd heittää suuren määrän lähtöä, joka menee sekaisin komentosarjoni tuloksen kanssa. Etsiminen ympärillä Olen löytänyt ratkaisun:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Onko olemassa vaihtoehtoa, vai ohjaako se uudelleen /dev/null
ainoa tapa?
Kommentit
m todella pahoillani. ’ m muokkaan komentosarjaa, joka ’ ei ole minun ja en huomannut sitä ’ . Todella pahoillani.
cat
, head
tai tail
. Vastaa
dd(1)
-sivulta:
status=noxfer suppress transfer statistics
näin:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Tämä tuottaa edelleen
0+1 records in 0+1 records out
roskat, kun dd
poistuu, joten uudelleenohjaus datasäiliöön on todellakin ainoa vaihtoehto.
Kommentit
- sitä pelkäsin ’.
- Uskon, että status = noxfer voi liittyä SIGUSR1-signaaliin, joka normaalisti näyttää siirron tilasto. En kuitenkaan halua testata, onko totta ’ totta, mitä sanon.
Vastaa
Lisää status=none
:
dd if=boot1h of="/dev/r$temp1" status=none
Kohdasta dd (coreutils) 8.21 asiakirjaa :
"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.
Kommentit
- @roaima – vain utelias, miksi muokkaan lainausta man-sivulta?
- @don_crissti Tunsin kontekstin (puuttumisen) ottaessani lainausta man-sivulta tarkoittavan, että se vaati hieman erilaista sanamuotoa. Kun se on -sivulla , se ’ on hieno; täällä se näytti oudolta.
- @roaima – okei – uteliaisuus tyytyväinen 🙂 – mutta huomaa, että linkit
info page
; tässä alkuperäisessä vastauksessa oli tarkka lainausman page
. Olisin kopioinut / liittänyt suoraaninfo
-sivulta, josman
-sivu on epäselvä, mutta sinusta riippuen … Voi, btw, kiitos paljon muista kommenteistasi vastauksestani, joka liittyy lajitteluun viikonpäivittäin. - Ei näytä olevan ’ t saatavilla dd (coreutils) 8.13:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Tämän pitäisi olla hyväksytty vastaus
Vastaus
Tulevaa tarvetta varten:
Dd-lähdön estäminen ohjaa stderr: n kokonaan uudelleen / dev / null:
dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null
Tämä toimii hyvin, jos haluat esimerkiksi ajastaa prosessin käyttämällä bashissa olevaa aikakomentoa ja liittää tuloksen muuttujaan saamatta mitään dd: n tuottamaa tulosta.
viite: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Vastaa
Jotain tämän pitäisi toimia myös BASH: n ja ZSH: n uusimpien versioiden kanssa:
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. Tämä on vain esimerkki, jonka juoksin …
Vastaa
Millä tahansa Unix-sovelluksella tai -komennolla voit estää kaiken lähdön
cmd >/dev/null 2>&1
Ensimmäinen bitti ohjaa vakiolähdön (yksikön numero 1) kohtaan / dev / null. Mutta tarvitset toisen osan myös ohjaamaan virhelähdön (yksikön numero 2) samaan paikkaan kuin numero 1.
UNIXissa STDIN = 0, STDOUT = 1 ja STDERR = 2
Kommentit
- Oikeastaan
stderr
on tiedostokuvaaja 2 . (Oletan, että ” STDERR = 3 ” on vain kirjoitusvirhe.) - Kaikkia lähtöjä ei ole toivottavaa estää . Jos tapahtuu virhe, haluaisimme nähdä virheilmoituksen.
-
cmd 2>logfile.txt
näyttää olevan paremmin mukautettu
Vastaa
Jos ymmärrän oikein, mitä yrität tehdä, laitatko kyseisen sudo
-komennon komentosarjaan ja odotatko komentosarja pyytää salasanasi, kun se suoritetaan siellä? Tällöin teet asioita vain monimutkaisella tavalla.
Puhtaampi ratkaisu on kirjoittaa komentosarja tavalliseen tapaan (eli ilman sudo
) ja aja se pääkäyttäjänä . Syynä tähän on, jos komentosarja tarvitsee pääkäyttäjän käyttöoikeuden, anna sille vain käyttöoikeus (miksi odottaa tiettyä komentoa?). Tarkista komentosarjassa, suoritetaanko se pääkäyttäjänä, tekemällä jotain tällaista:
if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
Kommentit
- ei. Se ’ on juuri se, mitä en halua tehdä ’. En halua ’ halua komentosarjan suorittavan vain pääkäyttäjänä, koska en halua ’ halua dd: n näyttävän tuotoksen. Tarkistuksesi korjata, jos haluan, että komentosarja suoritetaan pääkäyttäjänä.
- @dierre Joten miksi tarvitsit ensin
sudo
? Normaalien käyttäjien tulisi pystyä ohjaamaan asiat/dev/null
ihan hyvin. - I ’ m Ubuntun ja sen avulla ’ Toimintojen antaminen minulle ei ole sallittua … uhm …
- Olen ’ pahoillani. En huomannut ’ huomanneet, että luon jotain / dev / -kansioon. Käsikirjoitus ei ole minun, muokkain sitä. ’ Olen todella pahoillani.
Vastaa
voit ohjaa ulostulo tavalliseen tiedostoon eli
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– sinä ’ uudelleen sudoing, koskadd
tarvitsee kirjoitusoikeuden osoitteeseen/dev/r$temp1
(oletan). Sinun ’ on tehtävä se riippumatta siitä, miten tukahdutatdd
’ -lähtö; ulostulon uudelleenohjaaminen/dev/null
ei tarvitse ’ edellyttää root