[問題] 有關bash的read指令失效

看板Linux作者 (PTT新聞)時間10年前 (2015/10/16 11:03), 編輯推噓4(404)
留言8則, 3人參與, 最新討論串1/1
我做一個search keyword in multi files Script shell 其中read 這一行無法產生作用, 也就是不能暫停迴圈, 直到我按一鍵 find "$1" -type f -iname "$2" | while read filename do matchStr=$(grep -inC3 "$3" "$filename" ) if [ "$matchStr" != "" ]; then echo "---" echo -e "\033[00;33m$filename\033[0m" grep -inC3 "$3" "$filename" --color read -p "enter any key...." answer fi done 我懷疑第二行的read 已經改變standard io 改成從 file而不是keyboard 這是我的懷疑啦 謝謝~ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 101.13.145.47 ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1444964630.A.E26.html

10/16 15:04, , 1F
find 之前加上 exec 5<&0; 然後 read -p 該句最後補上 0<&5
10/16 15:04, 1F

10/16 17:12, , 2F
真的可行耶,請問大師,這是什麼魔法?
10/16 17:12, 2F

10/16 22:44, , 3F
redirection operator - duplicating file descriptors
10/16 22:44, 3F

10/17 10:29, , 4F
謝謝大師開導
10/17 10:29, 4F

11/16 13:18, , 5F
find之前加開了fd 5的話,那是不是最好用完後把它關掉?
11/16 13:18, 5F

11/16 13:19, , 6F
也就是原文中的while do done之後…
11/16 13:19, 6F

11/16 13:21, , 7F
再新增一行 exec 5<&- 呢?
11/16 13:21, 7F

11/16 13:22, , 8F
以避免接下來後續script有地方誤用到?!
11/16 13:22, 8F
文章代碼(AID): #1M86aMuc (Linux)
文章代碼(AID): #1M86aMuc (Linux)