Quando executamos qualquer comando em um shell bash, ele geralmente imprime a saída desse comando no terminal para que possamos lê-lo imediatamente. Mas o bash também oferece uma opção para 'redirecionar' a saída de qualquer comando bash para um arquivo de log. Ele pode salvar a saída em um arquivo de texto para que possamos revisá-la mais tarde, sempre que necessário.
Método 1: gravar a saída apenas em um arquivo
Para escrever a saída dos comandos Bash em um arquivo, podemos usar o sinal de colchete angular reto (>) ou o sinal de ângulo reto duplo (>>):
Sinal de colchete de ângulo reto (>)
É usado para gravar a saída do comando bash em um arquivo de disco. Se não houver nenhum arquivo com o nome especificado, será criado um novo arquivo com o mesmo nome. Se o arquivo estiver com o nome especificado, o conteúdo do arquivo será substituído.
Sinal de ângulo reto duplo (>>)
É usado para gravar a saída dos comandos bash em um arquivo, anexando a saída ao conteúdo existente do arquivo. Se o arquivo não estiver presente, ele cria um novo com o nome especificado.
Tecnicamente, ambos os operadores redirecionam 'stdout (a saída padrão)' para um arquivo.
De forma simples, quando estamos escrevendo o arquivo pela primeira vez e não queremos que os dados anteriores estejam presentes no arquivo, devemos utilizar o sinal de colchete angular reto (>). Ele substituirá o conteúdo se já estiver presente no arquivo. E no script posterior, podemos usar o sinal de ângulo reto duplo (>>) para anexar os dados a um arquivo.
Exemplo
O comando 'ls' é usado para imprimir todos os arquivos e pastas presentes no diretório atual. Mas quando executamos o comando 'ls' com um sinal de colchete angular reto (>), ele não imprimirá a lista de arquivos e pastas na tela. Ele salvará a saída no arquivo que especificamos com ele, ou seja, conforme mostrado abaixo:
Script Bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Checking the content of the file gedit output_file.txt
Saída
Conforme mostrado aqui, a saída do comando 'ls' é redirecionada para um arquivo. Para imprimir o conteúdo de um arquivo no terminal, podemos usar o comando ‘cat’ na seguinte forma:
Script Bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Printing the content of the file cat $output
Saída
Se quisermos redirecionar a saída de vários comandos para um único arquivo sem excluir os dados disponíveis, podemos usar o operador >>. Suponha que queiramos anexar as informações do sistema ao arquivo especificado, podemos fazer isso da seguinte maneira:
Script Bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls > $output #Appending the system information uname -a >> $output #Checking the content of the file gedit output_file.txt
Saída
Aqui, o resultado do segundo comando é anexado ao final do arquivo.
linguagem de computador bacana
Podemos repetir esse processo várias vezes para continuar anexando a saída ao final do arquivo.
Método 2: imprimir a saída normalmente e gravá-la em um arquivo
Algumas pessoas podem não gostar de escrever a saída em um arquivo usando os operadores > ou >>, pois não haverá saída do comando no terminal. É por isso que o comando 'tee' é usado. O comando 'tee' é usado para imprimir a entrada que recebe na tela. Ele pode salvar a saída em um arquivo ao mesmo tempo.
Script Bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt #Write data to a file ls | tee $output
Saída
Isso substituirá o conteúdo do arquivo, assim como o operador >, mas também imprimirá a saída na tela.
Se quisermos gravar a saída em um arquivo sem remover o conteúdo do arquivo usando o comando tee, podemos usar o seguinte formulário que também imprimirá a saída no terminal:
Script Bash
#!/bin/bash #Script to write the output into a file #Create output file, override if already present output=output_file.txt echo '<<>>' | tee -a $output #Write data to a file ls | tee $output echo | tee -a $output #Append System Information to the file echo '<<>>' | tee -a $output uname | tee -a $output
Saída
Isso não apenas anexará a saída ao final do arquivo, mas também imprimirá a saída na tela.