各位還記得之前在 Day04 有講過 Standard IO 的 Redirect 嗎,接下來兩天我們要開始實作 Redirect Stdin,至於 Stdout 跟 Stderr 因為做法差不多,時間不多的情況下就留給大家自己想想怎麼做了
<
怕大家已經忘記怎麼 Redirect Stdin,這邊舉個簡單的例子:
譬如說我可以先準備好一個 data
檔案並寫入以下內容
# data
print(1 + 1)
print("Hello" + "World")
接著執行 python < data
,意思是把 data
的內容餵進去 python
的 Stdin,那 python
讀取到這些內容之後就會輸出對應的結果
上面的例子是從 user 的角度看如何使用 Redirect Operator,那對 Shell 來說要怎麼做到 Redirect 呢?
首先 Shell 會先看到最後面的 < data
, 這個 < data
並不是 python
的參數 ,而是用來告訴 Shell 說要把 Stdin 的資料來源重新導向到 data
python < data
所以 Shell 看到 ... < data
就會知道「哦~原來你的程式想要 把 data
檔案當成 Stdin 啊」,於是 Shell 就會幫你
data
檔案python
指令的 Stdin 設為 data
檔案python
指令這樣跑起來的 python
Process 要從 Stdin 讀取資料時就會讀到 data
的內容
那這個過程中有沒有可能出錯呢?也許 data
檔案其實不存在,就像昨天要讀取 ~/.goshrc
一樣
在 zsh 裡面如果把 不存在的檔案名稱 當成資料餵進去,那在第一步「開啟 data
檔案」時就會出錯
zsh 會很明白的告訴你說沒有這個檔案,因為第一步就錯了所以也不會再執行下去
今天對於在 Shell 中 Redirect Stdin 的流程就介紹到這邊,其實這個流程我也是猜的XD,也許 zsh 不是這樣做
但無論如何,我們明天就會根據這個流程來實作~