Como mandar a saída de um comando para um arquivo de texto?

Olá, qual seria o comando que cria um arquivo de texto com a saída do comando apt list --installed?

1 Curtida

:wave:t2:
Testa o comando >

Exemplo: apt list --installed > instalados.txt

“>>”
é quando você quer enviar algo para um arquivo existente.

Lembrando que assim, sem indicar parametros de path, ele salva na home ou no diretório que você estiver atualmente.

4 Curtidas

Há duas maneiras: (1) comando > arquivo-destino e (2) comando | tee arquivo-destino (cuidado, ambas apagam o arquivo-destino e o substituem pela saída do programa).

  1. apt list --installed > instalados.txt (não aparece no terminal, mas o arquivo instalados.txt na pasta onde o comando foi rodado vai ter o conteúdo).
  2. apt list --installed | tee instalados.txt (aparece no terminal e no instalados.txt)
5 Curtidas

Isso ficou melhor explicado.

No caso do >> seria para acrescentar no arquivo destino, sem sobreescreve-lo e sem aparecer no terminal, ou seja, || faria o mesmo aparecendo no terminal, certo?

Uma brincadeira que pode ser feita para testar estes comandos e tem & e && também é usar o comando echo no terminal por exemplo:

echo hello > Planet.txt
echo hello | Planet.txt
echo hello & Planet.txt

daí pensamos, “ah esqueci do world” então:

echo world >> Planet.txt
echo world || Planet.txt
echo world && Planet.txt

Ele vai acrescentar e quando olharmos no .txt vai estar hello world O comando echo, ele entende como strings, ou seja, oque digitarmos a frente dele salva/sobreescreve no bloco de notas.

1 Curtida

Tem alguns truques além do que o @RuKsu disse:

apt list --installed 2> instalados.txt 

Redireciona apenas os erros

apt list --installed 2> > instalados.txt 

Redireciona a saida padrão e os erros

apt list --installed 2>&1 > instalados.txt 

Redireciona para o final de um arquivo

apt list --installed >> instalados.txt 

Salva em um arquivo e imprime na tela (necessário se precisar redirecionar pra um lugar que precisa de root)

apt list --installed | tee instalados.txt 

Salva no final de um arquivo e imprime na tela (necessário se precisar redirecionar pra um lugar que precisa de root)

apt list --installed | tee -a instalados.txt 

Edit: Todos os outros meios suportam 2>&1 não coloquei pra não ficar redundante

3 Curtidas

Obrigado por todas as respostas gente!

2 Curtidas

Apesar de fazer muito sentido, não é bem assim. comando1 || comando2 significa “execute comando2 se comando1 falhar”. O equivalente de >> com o tee seria comando | tee -a arquivo, como notou o @Natanael.755.

Dá pra passar um tempinho falando aqui dos 3 fluxos de dado que todo comando no Linux (e no BSD, MacOS, Solaris, etc.) têm, e como > e tee atuam neles para a razão dessa diferença, mas eu não consegui pensar em como condensar isso num único post.

3 Curtidas

O que foi explicado acima está correto, é isso mesmo.

Caso queira fazer um tratamento da saída, pode usar outros comandos como echo, cat, sed, cut, grep… fazendo com que a sua saída não seja totalmente bruta. Eu usei esses comandos em um post que fiz, Velocidade da Internet com SpeedTest no Linux + Monitoramento pelo Zabbix, nele há bastante filtragem da saída dos comandos, assim, salvando somente o que eu preciso e consigo utilizar.

1 Curtida