Como faço para suprimir a saída dd?

29

Eu tenho um script bash que cria algum arquivo usando dd . O problema é o dd lançar uma grande quantidade de saída que vai mexer com a saída do meu script. Pesquisando por aí, encontrei uma solução:

dd if=boot1h of="/dev/r$temp1" >& /dev/null

Existe uma alternativa ou está redirecionando para /dev/null da única maneira?

    
por dierre 31.01.2011 / 13:41

7 respostas

14

Na página dd(1) man:

   status=noxfer
          suppress transfer statistics

assim:

dd if=boot1h of="/dev/r$temp1" status=noxfer

Isso ainda gera o

0+1 records in
0+1 records out

lixo quando dd sai, então redirecionar para um coletor de dados é sua única opção.

    
por 31.01.2011 / 13:47
44
dd if=boot1h of="/dev/r$temp1" status=none

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.
    
por 23.04.2015 / 11:36
5

Para referência futura:

Para suprimir a saída dd, redirecione completamente o stderr para / dev / null da seguinte forma:

dd if=/dev/urandom of=sample.txt bs=5MB count=1 2> /dev/null

Isso funciona muito bem se você quiser, por exemplo, programar o tempo usando o comando time no bash e atribuir o resultado a uma variável, sem obter nenhuma saída que o dd produz.

referência: link

    
por 23.07.2015 / 19:09
2

Algo como isso também deve funcionar para você com versões recentes do BASH e do ZSH:

dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null

P.S. Este é apenas um exemplo que eu corri ...

    
por 01.02.2011 / 15:21
2

Com qualquer aplicativo ou comando Unix, você pode suprimir todas as saídas com

cmd >/dev/null 2>&1

O primeiro bit redireciona a saída padrão (unidade número 1) para / dev / null. Mas você precisa da segunda parte para TAMBÉM redirecionar a saída de erro (unidade número 2) para o mesmo local que o número 1.

No UNIX, STDIN = 0, STDOUT = 1 e STDERR = 2

por 04.02.2011 / 04:07
0

Se eu entendi corretamente o que você está tentando fazer, você está colocando esse comando sudo no script e esperando que o script solicite sua senha quando for executado lá? Nesse caso, você está apenas fazendo as coisas da maneira mais complicada.

Uma solução mais limpa é escrever o script da maneira usual (ou seja, sem sudo ) e executá-lo como superusuário . A razão por trás disso é que, se o script precisar de acesso de superusuário, basta dar o acesso (por que esperar até um certo comando?). No script, para verificar se está sendo executado como root, faça algo assim:

if [ "$(id -u)" != "0" ]; then
    echo "This script must be run as root" 1>&2
    exit 1
fi
    
por 31.01.2011 / 14:19
0

você pode redirecionar a saída para um arquivo normal, por exemplo:

 dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
    
por 31.01.2011 / 21:08

Tags