Bash寫入檔案


當在bash shell中執行命令時,通常會將命令的輸出列印到終端,以便可以立即看到輸出內容。但是bash還提供了一個選項,可以將任何bash命令的輸出「重定向」到紀錄檔檔案。它可以將輸出儲存到文字檔案中,以便以後在需要時可以對此文字檔案進行檢視。

方法1:僅將輸出寫入檔案

要將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

在這裡,第二條命令的結果將附加到檔案末尾。可以重複幾次此過程,以將輸出追加到檔案末尾。

執行上面範例程式碼,得到以下結果:
將輸出追加到文件末尾

方法2:列印輸出並寫入檔案

有些人可能不喜歡使用>>>運算子將輸出寫入檔案,因為終端中將沒有命令的輸出。可以通過使用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

執行上面範例程式碼,得到以下結果:
附加到文件末尾

上面範例不僅將輸出附加到檔案末尾,而且還將輸出列印在螢幕上。