-- Start
ksh 支持如下 I/O。
重定向 描述 > file 标准输出到文件,文件存在则替换 >> file 标准输出到文件,文件存在则添加到末尾 < file 从文件到标准输入 <> file 以读写模式打开文件 cmd1 | cmd2 管道; 把 cmd1 的标准输出作为 cmd2 的标准输入 >| file Force standard output to file even if noclobber is set << label Here-document <<- label Here-document variant <<< label Here-string n> file 把文件描述符 n 输出到文件(1是标准输出,2是标准错误输出) n< file 输入文件描述符 n (0是标准输入) <&n 从文件描述符 n重复标准输入 >&n 重复标准输出到文件描述符 n <&n- 把文件描述符 n作为标准输入 >&n- 把文件描述符 n作为标准输出 <&- 关闭标准输入 >&- 关闭标准输出 |& Background process with I/O from parent shell n<&p Move input from coprocess to file descriptor n n>&p Move output to coprocess to file descriptor n
cmd > t.log 2>&1什么是 Here-document (<< label,<<- label) 呢?你肯定也用过,只是不知道它的名字而已。看看下面的代码吧。
#!/bin/ksh user="[email protected]"; # << label mail $user << EOF Hi $user, This is a test mail, please ignore. Regards EOF # <<- label 会忽略前面的 TAB,使代码可读性更好 mail $user << EOF Hi $user, This is a test mail, please ignore. Regards EOF
什么是 Here-string 呢?看看下面的代码吧。
#!/bin/ksh user="[email protected]"; text="this is a test mail."; # 使用管道 print $text | mail $user; # <<< label mail $user <<< $text;
通常,Linux 命令只接受一个输入和一个输出,但是通过下面的方式,我们可以接受多个输入和多个输出。
cmd <(input) <(input) cmd >(output) >(output)
#!/bin/ksh # 将原始数据test.txt,1)排序后输出test.txt.sort 2) 取第二列输出test.txt.id 3) 保存原始数据 test.txt.raw cat test.txt | tee >(sort | uniq > test.txt.sort) >(cut -d, -f2 test.txt > test.txt.id) > test.txt.raw
-- 更多参见:ksh 精萃
-- 声 明:转载请注明出处
-- Last Updated on 2015-10-10
-- Written by ShangBo on 2015-10-05
-- End