Pergunta

Eu estou tentando saída de captura a partir de um script de instalação (que usos scp) e registrá-lo. No entanto, eu não estou recebendo tudo o que scp está a imprimir para fora, ou seja, a barra de progresso.

saída de tela:

Copiar / User2 / cdb / constrói / tmp / UAT / myfiles / * para servidor / usuários / myfiles como cdb

cdb @ senha do servidor: myFile 100% | ***************************** | 2503 00:00

saída de log:

Copiar / User2 / cdb / constrói / tmp / UAT / myfiles / * para servidor / usuários / myfiles como cdb

Eu realmente gostaria de saber que meu arquivo chegou lá. Aqui está o que estou tentando agora sem sucesso:

myscript.sh 2> & 1 | tee mylogfile.log

Alguém tem uma boa maneira de saída scp captura e registrá-lo?

Graças.

Foi útil?

Solução

Parece que o seu faltando apenas se o scp foi bem sucedida ou não do registro.

Eu estou supondo que a barra de rolagem não imprime para stdout e usos ncurses ou algum outro tipo de TUI?

Você pode apenas olhar para o valor de retorno de scp para ver se ele foi bem sucedido. Como

scp myfile user@host.com:. && echo success!

man scp diz

scp exits with 0 on success or >0 if an error occurred.

Outras dicas

scp imprime sua barra de progresso para os que utilizam códigos de controle do terminal. Ele irá detectar se você redirecionar a saída e, portanto, omitir a barra de progresso.

Você pode obter em torno de que enganando scp em pensar que é executado em um terminal usando o comando "script" que está instalado na maioria dos distros por padrão:

script -q -c "scp server:/file /tmp/" > /tmp/test.txt

O conteúdo de test.txt será:

file    0%    0     0.0KB/s   --:-- ETA
file   18%   11MB  11.2MB/s   00:04 ETA
file   36%   22MB  11.2MB/s   00:03 ETA
file   54%   34MB  11.2MB/s   00:02 ETA
file   73%   45MB  11.2MB/s   00:01 ETA
file   91%   56MB  11.2MB/s   00:00 ETA
file  100%   61MB  10.2MB/s   00:06

... que é provavelmente o que você quer.

Eu tropeçou este problema enquanto redirecionando a saída de um script interativo em um arquivo de log. Não ter os resultados no log não foi um problema, como você pode sempre avaliar códigos de saída. Mas eu realmente queria que o usuário interativo para ver a barra de progresso. Esta resposta resolve ambos os problemas.

Talvez você pode usar ' roteiro rel="nofollow ' para registrar a sessão de terminal.

scp myfile user@host.com:. && echo success! 

é muito útil, mas para escrever a mensagem para um arquivo de log eu mudei-lo como este

scp myfile user@host.com:. && echo myfile successfully copied! >> logfile 2>&1

e isso vai escrever "myfile copiado com sucesso!" mensagem para o arquivo de log.

Tente:

scp server:/file /tmp/ > /dev/tty

Não posso comentar ainda :( então eu vou adicionar uma atualização aqui ...

@ Martin teve a melhor solução para mim, embora se o seu comando scp está a meio caminho através de seu roteiro, então é saída pode aparecer depois de comandos que realmente correu depois.

Eu acho que é porque script deve executar o comando em um subshell, mas eu ainda estou para teste.

EDIT: é, de fato, gerar um shell por isso, se você precisa de coisas para executar (e de fato falhar) de forma sequencial (como em um script de construção), então você teria que adicionar alguma lógica em torno do uso do comando script.

i.

roteiro q -c "seu comando" && sleep 1

ou algo semelhante para que seus pais shell aguarda o shell criança ao fim antes de prosseguir.

Sim, eu recentemente estava tentando obter uma saída dentro de um script php de proc_open () eu perdi uma calma um tempo tentando obter uma saída :-) mas é um pouco tarde aqui e eu depois de ler este post aqui me fez perceber que eu realmente não precisa esta saída junky para o meu script

apenas o código de saída irá fazer o trabalho: -)

$ exit_code = proc_close ($ process);

$ grep -r "Error" xyz.out > abc.txt

Aqui no comando acima Eu sou armazenar saída em Abc.txt arquivo.

Este comando grep é para pesquisar containg texto Erro no arquivo xyz.out e armazenar a saída em Abc.txt sem exibir no console .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top