iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 21
1

前言

各位還記得之前在 Day04 有講過 Standard IO 的 Redirect 嗎,接下來兩天我們要開始實作 Redirect Stdin,至於 Stdout 跟 Stderr 因為做法差不多,時間不多的情況下就留給大家自己想想怎麼做了

Redirect Operator <

怕大家已經忘記怎麼 Redirect Stdin,這邊舉個簡單的例子:

譬如說我可以先準備好一個 data 檔案並寫入以下內容

# data
print(1 + 1)
print("Hello" + "World")

接著執行 python < data,意思是把 data 的內容餵進去 python 的 Stdin,那 python 讀取到這些內容之後就會輸出對應的結果

從 Shell 的角度看 Redirect

上面的例子是從 user 的角度看如何使用 Redirect Operator,那對 Shell 來說要怎麼做到 Redirect 呢?

首先 Shell 會先看到最後面的 < data, 這個 < data 並不是 python 的參數 ,而是用來告訴 Shell 說要把 Stdin 的資料來源重新導向到 data

python < data

所以 Shell 看到 ... < data 就會知道「哦~原來你的程式想要 把 data 檔案當成 Stdin 啊」,於是 Shell 就會幫你

  1. 開啟 data 檔案
  2. 把 python 指令的 Stdin 設為 data 檔案
  3. 執行 python 指令

這樣跑起來的 python Process 要從 Stdin 讀取資料時就會讀到 data 的內容

錯誤處理

那這個過程中有沒有可能出錯呢?也許 data 檔案其實不存在,就像昨天要讀取 ~/.goshrc 一樣

在 zsh 裡面如果把 不存在的檔案名稱 當成資料餵進去,那在第一步「開啟 data 檔案」時就會出錯

zsh 會很明白的告訴你說沒有這個檔案,因為第一步就錯了所以也不會再執行下去

小結

今天對於在 Shell 中 Redirect Stdin 的流程就介紹到這邊,其實這個流程我也是猜的XD,也許 zsh 不是這樣做

但無論如何,我們明天就會根據這個流程來實作~


上一篇
Day20-.goshrc 設定檔(二)
下一篇
Day22-Redirect Stdin(二)
系列文
Gosh!原來用 Go 寫一個 Unix Shell 這麼簡單 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言