När vi kör vilket kommando som helst i ett bash-skal, skrivs det vanligtvis ut från det kommandot till terminalen så att vi kan läsa det omedelbart. Men bash ger också en möjlighet att 'omdirigera' utdata från ett bash-kommando till en loggfil. Det kan spara utdata i en textfil så att vi kan granska det senare när det behövs.
Metod 1: Skriv endast utdata till en fil
För att skriva utdata av Bash-kommandon till en fil, kan vi använda rätvinklat hakparentes (>) eller dubbelt rätvinklat tecken (>>):
Skylt med höger vinkelfäste (>)
Det används för att skriva utdata från bash-kommandot till en diskfil. Om det inte finns någon fil med det angivna namnet skapas en ny fil med samma namn. Om filen finns där med det angivna namnet kommer innehållet i filen att skrivas över.
Dubbel rätvinklig skylt (>>)
Det används för att skriva utdata från bash-kommandon till en fil, lägga utdata till det befintliga innehållet i filen. Om filen inte finns, skapar den en ny med det angivna namnet.
Tekniskt sett omdirigerar båda dessa operatörer 'stdout (standardutgången)' till en fil.
På ett enkelt sätt, när vi ska skriva filen för första gången och inte vill att tidigare data ska finnas i filen, ska vi använda tecknet med rät vinkelparentes (>). Det kommer att skriva över innehållet om det redan finns i filen. Och i det ytterligare skriptet kan vi använda dubbelt rätvinkligt tecken (>>) för att lägga till data till en fil.
Exempel
Kommandot 'ls' används för att skriva ut alla filer och mappar som finns i den aktuella katalogen. Men när vi kör kommandot 'ls' med en rät vinkel hakparentes (>), kommer det inte att skriva ut listan med filer och mappar på skärmen. Det kommer att spara utdata till filen som vi anger med den, det vill säga som visas nedan:
Bash Script
#!/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
Produktion
Som visas här omdirigeras utdata från kommandot 'ls' till en fil. För att skriva ut innehållet i en fil till terminalen kan vi använda kommandot 'cat' i följande form:
Bash Script
#!/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
Produktion
Om vi vill omdirigera utdata från flera kommandon till en enda fil utan att radera tillgängliga data, kan vi använda operatorn >>. Anta att vi vill lägga till systeminformationen till den angivna filen, vi kan göra det på följande sätt:
Bash Script
#!/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
Produktion
Här läggs resultatet av det andra kommandot till i slutet av filen.
linux $home
Vi kan upprepa denna process flera gånger för att fortsätta lägga till utdata i slutet av filen.
Metod 2: Skriv ut utdata normalt och skriv det till en fil
Vissa människor kanske inte gillar att skriva utdata till en fil med > eller >> operatorer, eftersom det inte kommer att finnas någon utmatning av kommandot i terminalen. Det är därför kommandot 'tee' används. Kommandot 'tee' används för att skriva ut indata som det tar emot på skärmen. Det kan spara utdata till en fil samtidigt.
Bash Script
#!/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
Produktion
Detta kommer att åsidosätta innehållet i filen, precis som operatorn > men också skriva ut utdata på skärmen.
Om vi vill skriva utdata till en fil utan att ta bort innehållet i filen med tee-kommandot, kan vi använda följande formulär som också kommer att skriva ut utdata till terminalen:
Bash Script
#!/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
Produktion
Detta kommer inte bara att lägga till utdata i slutet av filen utan också skriva ut utdata på skärmen.