推 dou0228: 這很正常,一堆程式搞不清楚啥該送去stderr/stdout 11/02 10:44
→ dou0228: exit code 就更不用說 11/02 10:44
→ dou0228: 最後變成 跑去 pipe grep string 11/02 10:44
推 Neisseria: 這不就是命令列程式的日常嗎? XD 11/02 14:01
→ newversion: man 看看, exit status 有沒有亂唬人 11/02 21:07
推 lantw44: 印象中還看過有人用相反,正確回 1 錯誤回 0 的…… 11/02 23:58
推 LinBuoRen: 送 patch 造福萬千 11/03 20:22
推 final01: 其實你要多動動腦不是要人跟隨你的規則... 11/05 23:26
推 Gold740716: 也不是所有錯誤都要返回,像 rm -f 就算找不到檔案, 11/06 20:53
→ Gold740716: 也不會回報錯誤。 11/06 20:53
→ cuello: SUCCESS 正是 -f 這選項的主要功能喔 11/07 05:31
→ cuello: 換句話說,-f 正是為了回報 SUCCESS 而設計的 11/07 05:34
→ cuello: 所以它的行為是符合設計的 feature, 不是 bug 11/07 07:01
只要我們是在 von Neumann 架構的計算機上工作
無論是用甚麼語言作 coding,一定要以某種可預期形式回報!
不然的話,這個程式上面將無法再構築穩固的建物
因為所導致的 undefined behaviour 個個都是不定時炸彈
請理解,不是不可以不回報,而是,不能給建照
我硬碟裡就有一堆 "臨時搭蓋的鐵皮屋",是等著自作自受的
是隨時要拆掉改建的,絕對不能拿出來租售給其它靈長類的
因為隨時會塌,更不能在上面繼續加蓋上去
(後記 1541557942) 就算從功利的角度來看好了
如果是在課堂上、考證照、或是面試
這些事情其實應該要反應在扣分上的
不知道是不是有人願意分享這方面的實務經驗?
局部來看, 在類 UNIX 系統上工作, "0" 與 "非 0"
是相當有效的第一層分類,依需求,再各自定義 "非0" 類別
另一方面,stdout 與 stderr 則屬訊息的類別,或是"分流"
問: 請給我某某東西吃
答: 我沒有這個東西給你吃 (應該吐到 stderr)
因為 "我沒有這個東西給你吃" 本身並非提問者所期待的標的
這不是給提問者吃的,而是一種 meta-language.
ᆬu有從 stdout 吐出來的,才是給提問者吃的
當然,有些問題本身是不期待 stdout 的,這另當別論
屬於 FAQ 裡常見的,前一陣子看到的,沒時間回應,
$ ./a.out
為甚麼要這麼麻煩,還要 "./"? 為甚麼不乾脆
$ PATH=.:$PATH
因為在類 UNIX 系統上,有嚴格的食品安全政策
可以吃的,不能吃的,過期、來路不明的食物,都分們別類
想吃東西就要到a固定食物櫃拿,如果隨地檢來就吃的話...
一個古典的典型教案就是 /tmp/ 裡面來路不明的食物
因為 /tmp/ 是誰都可以亂丟東西的地方, 而且是 755
就在那裡等嘴饞的人.
※ 編輯: cuello (220.132.35.216), 11/07/2018 08:11:02
※ 編輯: cuello (220.132.35.216), 11/07/2018 08:36:10
推 dou0228: 我以為這已經是常識等級,沒想到還是需要解釋 11/07 08:50
→ cuello: 現代公民實在太忙了,沒空看說明書 11/07 10:29
→ cuello: 前輩們有空的話,還請多多推廣交通安全常識 11/07 10:30
→ cuello: 其實我應該多加一句話,效果可能會更好的... 好吧 11/07 10:31
※ 編輯: cuello (220.132.35.216), 11/07/2018 10:37:51
→ newversion: 有人應要腳踏車上高速公路,考驗汽車駕駛的智慧? 11/07 17:50
→ bitlife: 本文提的其實有點像rm -f 沒刪到檔算正常結束還是錯誤? 11/12 11:07
→ bitlife: 這點我是覺得由開發者決定,而不像rm刪除權限不足一樣確定 11/12 11:07
→ bitlife: 是錯誤. 11/12 11:08
→ bitlife: ls 也類似 'ls 你老師' 但沒'你老師'算不算錯誤? 11/12 11:09
→ bitlife: 如果沒有檔案算錯誤,那麼 ls *a 但沒有a結尾這些都得變錯 11/12 11:10
→ bitlife: 誤. 所以還是可能還是由開發者決定 11/12 11:10
→ bitlife: a結尾的檔 11/12 11:10
→ bitlife: 目前linux的rm是設計-f來區隔,沒用-f沒找到檔就算錯誤 11/12 11:12
→ bitlife: ls無類似機制,沒找到就報錯. 你文中的例子比較傾向ls 11/12 11:14
→ Bencrie: 那個行為 POSIX 應該有規範吧 11/12 12:27