本文共 1744 字,大约阅读时间需要 5 分钟。
-- 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-stringn> file 把文件描述符 n 输出到文件(1是标准输出,2是标准错误输出)n< file 输入文件描述符 n (0是标准输入)<&n 从文件描述符 n重复标准输入>&n 重复标准输出到文件描述符 n<&n- 把文件描述符 n作为标准输入>&n- 把文件描述符 n作为标准输出<&- 关闭标准输入>&- 关闭标准输出|& Background process with I/O from parent shelln<&p Move input from coprocess to file descriptor nn>&p Move output to coprocess to file descriptor n大家对 > file, >> file, < file 和 cmd1 | cmd2 应该都很熟悉, 只要懂一点 Linux 的人不可能没用过。 n> file 和 >&n 看上去挺陌生,其实你肯定也用过,看看下面的命令吧,是不是很熟悉。
cmd > t.log 2>&1什么是 Here-document (<< label,<<- label) 呢?你肯定也用过,只是不知道它的名字而已。看看下面的代码吧。
#!/bin/kshuser="wave0409@163.com";# << labelmail $user << EOFHi $user,This is a test mail, please ignore.RegardsEOF# <<- label 会忽略前面的 TAB,使代码可读性更好mail $user << EOF Hi $user, This is a test mail, please ignore. Regards EOF
什么是 Here-string 呢?看看下面的代码吧。
#!/bin/kshuser="wave0409@163.com";text="this is a test mail.";# 使用管道print $text | mail $user;# <<< labelmail $user <<< $text;
通常,Linux 命令只接受一个输入和一个输出,但是通过下面的方式,我们可以接受多个输入和多个输出。
cmd <(input) <(input)cmd >(output) >(output)下面是一个简单的例子。
#!/bin/ksh # 将原始数据test.txt,1)排序后输出test.txt.sort 2) 取第二列输出test.txt.id 3) 保存原始数据 test.txt.rawcat test.txt | tee >(sort | uniq > test.txt.sort) >(cut -d, -f2 test.txt > test.txt.id) > test.txt.raw
-- 更多参见:
-- 声 明:转载请注明出处
-- Last Updated on 2015-10-10
-- Written by ShangBo on 2015-10-05 -- End