Por que o dd não gera saída para o stdout?


2

Este é o comando com o qual estou enfrentando o problema

username@computer /current/working/directory
$ dd if="$filename" bs=1 seek=10 count=10 conv=notrunc status=progress^C
0+0 records in
0+0 records out
0 bytes copied, 1.70242 s, 0.0 kB/s

Saída de teste para arquivo de teste (por sanidade?)

username@computer /current/working/directory
$ dd if="$filename" bs=1 seek=10 count=10 conv=notrunc status=progress of=test
22+0 records in
22+0 records out
22 bytes copied, 0.0115305 s, 1.9 kB/s

Meio Ambiente

username@computer  /current/working/directory
$ echo $filename
somefile.ext

username@computer /current/working/directory
$ dd --version
dd (coreutils) 8.26
Packaged by Cygwin (8.26-1)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Paul Rubin, David MacKenzie, and Stuart Kemp.

username@computer /current/working/directory
$ echo $SHELL
/bin/bash

username@computer /current/working/directory
$ bash --version
GNU bash, version 4.4.5(1)-release (x86_64-unknown-cygwin)
Copyright (C) 2016 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

username@computer /current/working/directory
$ stty
speed 38400 baud; line = 0;
start = <undef>; stop = <undef>; lnext = ^Q;
-imaxbel
-echoe -echok -echoctl -echoke

A seção relevante da ddpágina Man, que parece implicar a saída para o descritor / fluxo de arquivos stdout, é o comportamento padrão:

      of=FILE
             write to FILE instead of stdout

Exemplos que encontrei como neste link também implicam que: AskUbuntu - Como você monitora o progresso do dd?

  • Windows 10 Pro x64
  • Cygwin
  • ConEmu 170517

Respostas:


3

O problema pode ser com o seekque diz ddpara pular alguns blocos no início de sua saída. Como você espera que funcione stdout? No meu Ubuntu, o ddcomando semelhante também trava até eu pressionar Ctrl+ C.

Solução: livre-se da seek=10opção e ela deve funcionar.

Nota: para pular o uso da entrada skip. Talvez seja isso que você realmente queria.


Ratos! Eu sabia sobre essa distinção dos recentes, mas fiquei confuso ao deixar o parâmetro de um exemplo que estava gravando em um arquivo em vez de ler um: stackoverflow.com/a/5586379/1091943 Obrigado!
Pysis

Sim, mudou para skipe funcionou!
Pysis

0

Você tem as palavras "of = test" no final da linha que diz ao dd para gravar a saída em um arquivo "test" - exclua esse bit e ele gravará no stdout.


11
O comando com o qual estou tendo problemas foi a primeira chamada ddque falta apenas o of=parâmetro do teste de chamada a seguir e mostra que nenhum registro foi processado depois que eu saí manualmente. Esclareci algumas partes do texto da pergunta em conformidade.
Pysis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.