Kiedy uruchamiamy dowolne polecenie w powłoce bash, zazwyczaj wypisuje ono wynik tego polecenia na terminalu, abyśmy mogli go natychmiast odczytać. Ale bash zapewnia również opcję „przekierowania” wyniku dowolnego polecenia bash do pliku dziennika. Może zapisać dane wyjściowe w pliku tekstowym, abyśmy mogli je później przejrzeć, gdy zajdzie taka potrzeba.
Metoda 1: Zapisz dane wyjściowe tylko do pliku
Aby zapisać wynik poleceń Bash do pliku, możemy użyć znaku nawiasu prostokątnego (>) lub podwójnego znaku kąta prostego (>>):
Znak nawiasu kątowego (>)
Służy do zapisywania wyniku polecenia bash w pliku dyskowym. Jeśli nie ma pliku o podanej nazwie, tworzy nowy plik o tej samej nazwie. Jeśli plik istnieje pod podaną nazwą, to zawartość pliku zostanie nadpisana.
Znak podwójnego kąta prostego (>>)
Służy do zapisywania wyników poleceń bash do pliku i dołączania wyników do istniejącej zawartości pliku. Jeżeli pliku nie ma, tworzy nowy o podanej nazwie.
Technicznie rzecz biorąc, oba te operatory przekierowują „stdout (standardowe wyjście)” do pliku.
W prosty sposób, gdy piszemy plik po raz pierwszy i nie chcemy, aby w pliku znajdowały się poprzednie dane, powinniśmy użyć znaku nawiasu kątowego (>). Zastąpi zawartość, jeśli jest już obecna w pliku. W dalszym skrypcie możemy użyć podwójnego znaku kąta prostego (>>), aby dołączyć dane do pliku.
Przykład
Polecenie „ls” służy do wydrukowania wszystkich plików i folderów znajdujących się w bieżącym katalogu. Ale gdy uruchomimy polecenie „ls” ze znakiem nawiasu kątowego (>), lista plików i folderów nie zostanie wydrukowana na ekranie. Zapisze dane wyjściowe do pliku, który za jego pomocą określimy, tj. Jak pokazano poniżej:
Skrypt Basha
#!/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
Wyjście
Jak pokazano tutaj, dane wyjściowe polecenia „ls” są przekierowywane do pliku. Aby wydrukować zawartość pliku na terminalu, możemy użyć polecenia „cat” w następującej formie:
Skrypt Basha
#!/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
Wyjście
Jeśli chcemy przekierować wyjście wielu poleceń do jednego pliku bez usuwania dostępnych danych, możemy skorzystać z operatora >>. Załóżmy, że chcemy dołączyć informacje o systemie do określonego pliku, możemy to zrobić w następujący sposób:
Skrypt Basha
#!/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
Wyjście
Tutaj wynik drugiego polecenia jest dołączany na końcu pliku.
usuwanie ostatniego zatwierdzenia gi
Możemy powtórzyć ten proces kilka razy, aby nadal dołączać dane wyjściowe na końcu pliku.
Metoda 2: Wydrukuj normalnie wydruk i zapisz go w pliku
Niektórzy ludzie mogą nie lubić zapisywania danych wyjściowych do pliku przy użyciu operatorów > lub >>, ponieważ polecenie nie wyświetli wyniku w terminalu. Dlatego właśnie używane jest polecenie „tee”. Polecenie „tee” służy do drukowania otrzymanych danych wejściowych na ekranie. Może jednocześnie zapisać dane wyjściowe do pliku.
Skrypt Basha
#!/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
Wyjście
Spowoduje to zastąpienie zawartości pliku, podobnie jak operator >, ale także wydrukuje wynik na ekranie.
Jeśli chcemy zapisać wynik do pliku bez usuwania zawartości pliku za pomocą polecenia tee, możemy skorzystać z poniższego formularza, który również wydrukuje dane wyjściowe na terminalu:
Skrypt Basha
#!/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
Wyjście
Spowoduje to nie tylko dodanie wyniku na końcu pliku, ale także wydrukowanie wyniku na ekranie.