作者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