Eu tenho um script bash que cria algum arquivo usando dd
. O problema é que o dd lança uma grande quantidade de saída que vai mexer com a saída do meu script. Pesquisando, encontrei uma solução:
dd if=boot1h of="/dev/r$temp1" >& /dev/null
Existe uma alternativa ou está redirecionando para /dev/null
a única maneira?
/dev/null
- você está processando porquedd
precisa de acesso de gravação/dev/r$temp1
(presumo). Você precisará fazer isso, independentemente de como suprimirdd
a saída; redirecionar a saída para/dev/null
não requer raizcat
,head
outail
em vez disso.Respostas:
Na
dd(1)
página do manual:portanto:
Isso ainda gera o
lixo quando
dd
sai, portanto, o redirecionamento para um coletor de dados é realmente sua única opção.fonte
Adicionar
status=none
:Dos documentos do dd (coreutils) 8.21 :
fonte
info page
; a resposta inicial aqui tinha a citação exata doman page
. Eu teria copiado / colado diretamente doinfo
página se aman
página for ambígua, mas realmente, até você ... Ah, btw, muito obrigado pelo seu outro comentário na minha resposta relacionada à classificação por dia da semana.dd
semstatus=
)dd: invalid status flag: `none' Try `dd --help' for more information.
Para referência futura:
Para suprimir a saída do dd, redirecione completamente o stderr para / dev / null da seguinte maneira:
Isso funciona bem se você quiser, por exemplo, cronometrar o processo 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: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
fonte
Algo assim também deve funcionar para você nas versões recentes do BASH e ZSH:
PS Este é apenas um exemplo que eu corri ...
fonte
Com qualquer aplicativo ou comando Unix, você pode suprimir toda a saída com
cmd >/dev/null 2>&1
O primeiro bit redireciona a saída padrão (número da unidade 1) para / dev / null. Mas você precisa da segunda parte para também redirecionar a saída de erro (número da unidade 2) para o mesmo local que o número 1.
No UNIX, STDIN = 0, STDOUT = 1 e STDERR = 2
fonte
stderr
possui o descritor de arquivo 2 . (Suponho que "STDERR = 3" seja apenas um erro de digitação.) #cmd 2>logfile.txt
parece mais adaptadaSe eu entendi direito o que você está tentando fazer, você está colocando isso
sudo
comando no script e esperando que o script solicite sua senha quando ela for executada 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, forneça apenas o acesso (por que esperar até um determinado comando?). No script, para verificar se está sendo executado como root, faça algo assim:fonte
sudo
em primeiro lugar? Usuários normais devem ser capazes de redirecionar as coisas para/dev/null
a perfeição.você pode redirecionar a saída para um arquivo regular, ou seja:
fonte