Shell 重定向(一):檔案重定向

weixin_33866037發表於2017-05-18

在 Linux 中,總有 3 個預設的裝置檔案是開啟的,即標準輸入 stdin(鍵盤)、標準輸出 stdout(螢幕)和標準錯誤 stderr(輸出到螢幕的錯誤資訊)。這 3 個檔案和其他任何開啟的檔案,都可以被重定向。重定向簡單地說就是從檔案、命令、程式、指令碼,甚至是指令碼中的程式碼塊獲取輸出並把它作為輸入傳送到另一個檔案、命令、程式或指令碼。

每個開啟的檔案被指定一個描述符。比如,標準輸入、標準輸出和標準錯誤的檔案描述符即分別是 0、1 和 2。對於開啟的另外的檔案,這裡餘留了檔案描述符 3~9。

檔案重定向

檔案重定向是更改一個檔案描述符以指向一個檔案。

操作符 “>” 開始一個輸出重定向。重定向預設只適用於一條命令。當 Bash 執行命令時,它告訴 Bash,標準輸出(stdout)應當指向一個檔案,而不是它之前指向的地方。

這個重定向只對它應用於的單個命令有效。再此之後執行的其他命令將繼續把它們的輸出傳送到指令碼的標準輸出位置。

一個簡單的示例:

#! /bin/bash

if [ $# -lt 1 ]; then
    echo "Usage: $0 DIRECTORY..."
    exit
fi

# 遍歷在命令列中給指令碼指定的所有引數
for dir in $@
do
    find $dir -name "*.tmp" -exec rm -f {} \;
done 2> errors.log

保留檔案先前內容

使用雙重重定向操作符“>>”。“>>”將不會清空檔案,它將只是新增新的內容到檔案末尾。

因此,對上面的例子進行修改:

#! /bin/bash

if [ $# -lt 1 ]; then
    echo "Usage: $0 DIRECTORY..."
    exit
fi

# 遍歷在命令列中給指令碼指定的所有引數
for dir in $@
do
    find $dir -name "*.tmp" -exec rm -f {} \;
done 2>> errors.log

本文參考自 《Linux Shell命令列及指令碼程式設計例項詳解

相關文章