Linux下的 stdin / stdout / stderr

大概說明一下 Linux 下的 stdin / stdout / stderr(等待輸入 / 輸出訊息 / 輸出錯誤)其實這篇是幫我自己複習…

這篇詳細的文章會類似在這邊
http://www.cyberciti.biz/faq/redirecting-stderr-to-stdout/

首先,這三個東西配到 Ruby 身上的話,你要知道什麼是 gets & puts,這東西大概所有可以跑在 Linux 的程式語言都有就是,其實最後處理到 Linux 上就是 stdin & stdout,而 Exception(出錯後的例外處理) 就是 stderr

這三個其實都可以變成純文字檔案的方式,而不是 stdin 就真的要用鍵盤輸入之類的,分部解釋一下,首先是stdin

stdin.txt( 第一個數字當count用)

7
1
1
2
3
5
8
13

fibonacc_stdin.rb(因為第一個數字是count所以直接拿來當times用)

gets.to_i.times do
  puts gets
end

執行

ruby fibonacc_stdin.rb < stdin.txt
#把數字印出來

okay…這就是 stdin 的操作方式,再來是 stdout,類似

ls > stdout.txt

這其實就是 stdout 存檔的方式,Linux 玩熟一點的人應該都有用過,最後一個是stderr,類似

stderr.rb

yooooo #嘛...一定no method / NameError

執行

ruby stderr.rb 2> stderr.txt

okay,bash還有很詳細的解釋,類似 0 = stdin / 1 = stdout / 2 = stderr,這樣就會知道為啥是 2>,之後是一些範例

ruby test.rb < stdin.txt > stdout.txt > stderr.txt #三個連用,因為1有被用掉,所以不用打2>
ruby test.rb > stdout.txt 2>&1 #合併stdout & stderr
ruby test.rb &> stdout.txt #作用同上

okay…大概就是這樣,而這個主題其實會歸給 bash 的使用就是了,所以如果想要繼續鑽研這個鬼東西的話,請去看Linux shell / bash 的使用方式唄,而不同的 shell 可能有所出入就是了

同場加映純 Linux 測試執行某程式的花費時間:

time ruby test.rb

前面加一個 time 的指令而已,以上 :slight_smile:

1個讚