當在bash shell中執行命令時,通常會將命令的輸出列印到終端,以便可以立即看到輸出內容。但是bash還提供了一個選項,可以將任何bash命令的輸出「重定向」到紀錄檔檔案。它可以將輸出儲存到文字檔案中,以便以後在需要時可以對此文字檔案進行檢視。
要將Bash命令的輸出寫入檔案,可以使用右尖括號符號(>
)或雙右尖符號(>>
):
右尖括號(>)
右尖括號號(>
)用於將bash命令的輸出寫入磁碟檔案。如果沒有指定名稱的檔案,則它將建立一個具有相同名稱的新檔案。如果該檔案名稱已經存在,則會覆蓋原檔案內容。
雙右尖括號(>>)
它用於將bash命令的輸出寫入檔案,並將輸出附加到檔案中。如果檔案不存在,它將使用指定的名稱建立一個新檔案。
從技術上講,這兩個運算子都將stdout
(標準輸出)重定向到檔案。
當第一次寫入檔案並且不希望以前的資料內容保留在檔案中時,則應該使用右尖括號(>
)。也就是說,如果檔案中已經存在內容,它會清空原有資料內容,然後寫入新資料。使用雙右尖括號(>>
)則是直接將資料附加到檔案中,寫入後的內容是原檔案中的內容加上新寫入的內容。
範例ls
命令用於列印當前目錄中存在的所有檔案和檔案夾。但是,當執行帶有直角括號符號(>
)的ls
命令時,它將不會在螢幕上列印檔案和檔案夾列表。而是將輸出儲存到用指定的檔案中,即如下指令碼程式碼所示:
#!/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
執行上面範例程式碼,得到以下結果:
如此處所示,ls
命令的輸出重定向到檔案中。要將檔案的內容列印到終端,可以使用以下cat
命令格式:
#!/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
執行上面範例程式碼,得到以下結果:
如果要在不刪除原檔案資料內容的情況下,將多個命令的輸出重定向到單個檔案,則可以使用>>
運算子。假設要將系統資訊附加到指定的檔案,可以通過以下方式實現:
#!/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
在這裡,第二條命令的結果將附加到檔案末尾。可以重複幾次此過程,以將輸出追加到檔案末尾。
執行上面範例程式碼,得到以下結果:
有些人可能不喜歡使用>
或>>
運算子將輸出寫入檔案,因為終端中將沒有命令的輸出。可以通過使用tee
命令將接收到的輸入列印到螢幕上,同時將輸出儲存到檔案中。
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
執行上面範例程式碼,得到以下結果:
與>
運算子一樣,它將覆蓋檔案的原內容,但也會在螢幕上列印輸出。如果要在不使用tee
命令刪除檔案內容的情況下將輸出寫入檔案,則可以使用以下格式將輸出列印到終端,參考以下程式碼:
#!/bin/bash
#Script to write the output into a file
#Create output file, override if already present
output=output_file.txt
echo "<<<List of Files and Folders>>>" | tee -a $output
#Write data to a file
ls | tee $output
echo | tee -a $output
#Append System Information to the file
echo "<<<OS Name>>>" | tee -a $output
uname | tee -a $output
執行上面範例程式碼,得到以下結果:
上面範例不僅將輸出附加到檔案末尾,而且還將輸出列印在螢幕上。