作者goldie (阿良)
看板LinuxDev
標題Re: [問題] batch to shell script
時間Wed Jul 3 22:50:43 2013
※ 引述《psylove5566 (甜小蜜)》之銘言:
: Hi,
: 請教一下各位大大
: 我有一個batch file如下:
: FOR /F %%i in (list1.txt) DO (parser21 < OriginalData_new/%%i > ParserOut_ver/%%i )
: 我想轉換為shell檔,我試著轉換,以下是經過網路上查後,我轉換後的檔案,但因為還是無法執行,想請教一下錯誤何在?
: for i in [list1.txt]; do "parser21 < OriginalData_new/i > ParserOut_ver/i "
我猜你是要把 list1.txt 裡的內容,一次取一行出來對吧?
在 bash 裡,
用 while + read 兩個指令搭配,以達到切一行一行出來,
對於讀檔來說,我覺得比 for 好用。
例如: (假設 parser21 OriginalData_new/ ParserOut_ver/ 都在當前目錄)
--------------------------------------
#!/bin/bash
while read -r -d $'\n' line; do
./parser21 < "./OriginalData_new/${line}" > "./ParserOut_ver/${line}"
done < <(cat list1.txt)
--------------------------------------
應該會是你要的?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.42.52.73
1F:推 psylove5566:恩,我是要讀list中的每一個檔案,謝謝您的回覆 07/04 10:17
2F:→ goldie:-d設定分隔字元, 本次採unix換行字元: $'\n' 07/04 21:59
3F:→ goldie:格式一定要錢號加一對單引號,不能少$,也不能換成雙引號 07/04 22:00
4F:→ goldie:這是 bash 特殊語法,用於展開跳脫字元 07/04 22:01
5F:推 psylove5566:不好意思,我執行後出現以下的錯誤 07/05 16:15
6F:→ psylove5566:syntax error near unexpected token `<' 07/05 16:16
7F:→ psylove5566:請問,done表示while結束,為啥輸入list在done之後? 07/05 16:18
8F:→ psylove5566:請問兩個<分開打的意思是什麼,謝謝您的回覆 07/05 16:19
9F:→ goldie:()是subshell而<()多把subshell的stdout導出偽裝成檔案 07/05 22:20
10F:→ goldie:再用第一個<設定while-loop的stdin來自上述的(偽)檔案 07/05 22:21
11F:→ goldie:< <() 等效於 < input_text_file 07/05 22:23
12F:→ goldie:所以兩個< <不能連在一起,因為是不同功能用途XDDD 07/05 22:25
13F:→ goldie:當然你可以把這個while-loop重寫成 pipe 型式… 例如: 07/05 22:25
14F:→ goldie:cat list1.txt | while read -r -d $'\n' line; do (…略) 07/05 22:26
15F:→ goldie:雖然改成這樣好像比較直觀,但我覺得有時反而難用,因為… 07/05 22:27
16F:→ goldie:原本是cat跑在subshell裡,新的反而是pipe後面的while-loop 07/05 22:31
17F:→ goldie:跑在subshell裡,這樣我常在while-loop設定全域變數,會在 07/05 22:32
18F:→ goldie:script其他處取用不到(parent shell)會造成有些你想做的事 07/05 22:33
19F:→ goldie:情你達不到 07/05 22:33
20F:→ goldie:關於<()跟>()語法,有個名詞叫 "process substitution" 07/05 22:36
22F:→ goldie:以及 Google Shell Style Guide: 07/06 14:54
24F:→ goldie:若兩個<少隔空白而連在一起成<<則變成here document種語法 07/06 22:27
25F:推 psylove5566:謝謝您詳細的介紹,非常的感激 07/07 10:04