Tenho um script bash que cria alguns arquivos usando dd
. O problema é que o dd gera uma grande quantidade de saída que vai atrapalhar 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
o única maneira?
Comentários
M realmente sinto muito. Eu ‘ estou editando um script que ‘ não é meu e não ‘ o notou . Sinto muito.
cat
, head
ou tail
. Resposta
Da dd(1)
página de manual:
status=noxfer suppress transfer statistics
assim:
dd if=boot1h of="/dev/r$temp1" status=noxfer
Isso ainda resulta em
0+1 records in 0+1 records out
lixo quando dd
sai, então redirecionar para um coletor de dados é realmente sua única opção.
Comentários
- isso eu ‘ tenho medo de.
- Eu acredito que status = noxfer, pode estar relacionado ao sinal SIGUSR1, que normalmente mostra a transferência estatística. No entanto, não estou disposto a testar se ‘ é verdade o que estou dizendo.
Resposta
Adicione status=none
:
dd if=boot1h of="/dev/r$temp1" status=none
"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.
Comentários
- @roaima – apenas curiosidade, por que editar uma citação da página de manual?
- @don_crissti Eu percebi que a (falta de) contexto ao extrair a citação da página de manual significava que era necessária uma forma ligeiramente diferente de palavras. Como está na página do manual , ‘ está bem; aqui parecia estranho.
- @roaima – tudo bem – curiosidade satisfeita 🙂 – mas observe que você vincula a
info page
; a resposta inicial aqui tinha a citação exata deman page
. Eu teria copiado / colado diretamente da páginainfo
se a páginaman
fosse ambígua, mas, realmente, depende de você … Oh, btw, muito obrigado por seu outro comentário sobre minha resposta relacionado à classificação por dia da semana. - Não ‘ t parece estar disponível no dd (coreutils) 8.13:
dd: invalid status flag: `none' Try `dd --help' for more information.
- IMO Esta deve ser a resposta aceita
Resposta
Para referência futura:
Para suprimir a saída do 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, cronometrar o processo usando o comando time em bash e atribuir o resultado a uma variável, sem obter qualquer saída que o dd produz.
referência: http://www.unix.com/shell-programming-and-scripting/131624-how-suppress-dd-output.html
Resposta
Algo assim também deve funcionar para você com versões recentes do BASH e ZSH:
dd if=/path/to/file of=/path/to/another_file bs=1M count=1 &> /dev/null
P.S. Este é apenas um exemplo que executei …
Resposta
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 lugar que o número 1.
No UNIX, STDIN = 0, STDOUT = 1 e STDERR = 2
Comentários
- Na verdade,
stderr
tem o descritor de arquivo 2 . (Presumo que ” STDERR = 3 ” seja apenas um erro de digitação.) - Não é desejável suprimir todas as saídas . Se ocorrer um erro, gostaríamos de ver a mensagem de erro.
-
cmd 2>logfile.txt
parece mais adaptado
Resposta
Se bem entendi o que você está tentando fazer, você está colocando aquele sudo
comando no script e esperando o script para solicitar sua senha quando for executado lá? Nesse caso, você está apenas fazendo as coisas da maneira complicada.
Uma solução mais limpa é escrever o script da maneira usual (ou seja, sem sudo
) e execute-o como superusuário . A razão por trás disso é, se o script precisa de acesso de superusuário, basta conceder o acesso (por que esperar até um determinado comando?). No script, para verificar se ele 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
Comentários
- não. Isso ‘ é exatamente o que eu não ‘ não quero fazer. Eu não ‘ não quero que o script seja executado como root apenas porque eu não ‘ não quero que o dd exiba a saída. Sua verificação seria corrigida se eu quiser que o script seja executado como superusuário.
- @dierre Então, por que você precisava de
sudo
em primeiro lugar? Usuários normais devem ser capazes de redirecionar coisas para/dev/null
muito bem. - Eu ‘ estou usando o Ubuntu e ele ‘ s me dando operação não permitida … uhm …
- Eu ‘ sinto muito. Não ‘ não percebi que estava criando algo em / dev /. O roteiro não é meu, eu estava editando. Eu ‘ sinto muito.
Resposta
você pode redirecionar a saída para um arquivo normal, ou seja:
dd if=boot1h of="/dev/r$temp1" >& /tmp/dd.log
/dev/null
– você ‘ está sudoing porquedd
precisa de acesso de gravação para/dev/r$temp1
(presumo). Você ‘ vai precisar fazer isso, não importa como você suprimedd
‘ saída de s; redirecionar a saída para/dev/null
não ‘ não requer raiz