Tentei redirecionar a saída do comando time, mas não consegui:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
No arquivo, posso ver a saída do ls
comando, não a de time
. Explique por que não pude e como fazer isso.
Tentei redirecionar a saída do comando time, mas não consegui:
$time ls > filename
real 0m0.000s
user 0m0.000s
sys 0m0.000s
No arquivo, posso ver a saída do ls
comando, não a de time
. Explique por que não pude e como fazer isso.
Respostas:
você pode redirecionar a saída de tempo usando,
(time ls) &> file
Porque você precisa tomar (tempo ls) como um único comando para poder usar colchetes.
&>
favor, onde posso saber mais sobre isso?
&>file
é análogo a >file 2>&1
. Ele direciona stdout e stderr.
não há necessidade de iniciar o sub shell. Use um bloco de código também.
{ time ls; } 2> out.txt
ou
{ time ls > /dev/null 2>&1 ; } 2> out.txt
2>
favor. Onde posso aprender sobre isso?
O tempo de comando envia sua saída para STDERR (em vez de STDOUT). Isso ocorre porque o comando executado com o tempo normalmente (neste caso ls) tem saída para STDOUT.
Se você deseja capturar a saída do tempo, digite:
(time ls) 2> filename
Isso captura apenas a saída de tempo, mas a saída de ls é normal para o console. Se você deseja capturar ambos em um arquivo, digite:
(time ls) &> filename
2> redireciona STDERR, &> redireciona ambos.
o tempo está embutido no shell e não tenho certeza se há uma maneira de redirecioná-lo. No entanto, você pode usar em
/usr/bin/time
vez disso, o que definitivamente aceita qualquer redirecionamento de saída.
bash time mycmd 2>file
. Ou apenas ligue /usr/bin/time
como foi mencionado.
Se você não quiser misturar a saída de time
e o comando. Com o GNU time, você pode usar -o file
como:
/usr/bin/time -o tim grep -e k /tmp 1>out 2>err
while tim
é a saída do tempo, out
e err
são stdout e stderr de grep
.
O motivo pelo qual o redirecionamento parece não funcionar time
é que ele é uma palavra reservada do bash (não um embutido!) Quando usado na frente de um pipeline. bash (1):
Se a palavra reservada de tempo preceder um pipeline, o tempo decorrido, bem como o tempo do usuário e do sistema consumido por sua execução são relatados quando o pipeline termina.
Portanto, para redirecionar a saída de time
, use chaves:
{ time ls; } 2> filename
Ou ligue para /usr/bin/time
:
/usr/bin/time ls 2> filename