您的位置:首页 > 运维架构 > Shell

shell重定向,管道

2015-05-10 21:31 585 查看
管道命令操作符是:”|”,它仅能处理经由前面一个指令传出的正确输出信息,也就是 standard output 的信息,对于 stdandard

error 信息没有直接处理能力。然后,传递给下一个命令,作为标准的输入 standard input.

实例:

Jane:test4 jane$ cat proxy.sh | grep -n 'echo'
26:    echo -n "Starting ${PACKAGE_DESC}: "
48:    echo "${PACKAGE_NAME}."
52:    echo -n "Stopping ${PACKAGE_DESC}: "
54:    echo "${PACKAGE_NAME}."
65:    echo "Usage: [sudo] $N {start|stop|restart}" >&2
70:    echo "please use sudo to run ${PACKAGE_NAME}"

Jane:test4 jane$ ls | ls e*.txt
echo_re.txt


个人觉得这个好想就是一个算数中的或运算

ls | ls e*.txt >chongdingxiang+guandao.txt


这个chongdingxiang+guandao.txt 的内容就是前面管道输出的内容。重定向的理解是将前>左边的输出结果保存在右边的文件

管道命令与重定向区别:

1、左边的命令应该有标准输出 | 右边的命令应该接受标准输入

左边的命令应该有标准输出 > 右边只能是文件

左边的命令应该需要标准输入 < 右边只能是文件

2、管道触发两个子进程执行”|”两边的程序;而重定向是在一个进程内执行

这些都是网上总结很多的,其实只要多加清楚用法,也一定有自己的一份不同描述。

实例

Jane:test4 jane$ cat proxy.sh | grep -n 'echo'
26:    echo -n "Starting ${PACKAGE_DESC}: "
48:    echo "${PACKAGE_NAME}."
52:    echo -n "Stopping ${PACKAGE_DESC}: "
54:    echo "${PACKAGE_NAME}."
65:    echo "Usage: [sudo] $N {start|stop|restart}" >&2
70:    echo "please use sudo to run ${PACKAGE_NAME}"
#"|"管道两边都必须是shell命令
Jane:test4 jane$ ls  >ls.txt
a.txt
abdcg.txt
b.txt
c.old
chongdingxiang+guandao.txt
echo_re.txt
guangdao_history.txt
ls.txt
ls_a*_.txt
ls_re.txt
proxy.sh
tongbeifu_history.txt
//#"重定向"符号,右边只能是文件(普通文件,文件描述符,文件设备)


再概括下:

从上面例子可以看,重定向与管道在使用时候很多时候可以通用,其实,在shell里面,经常是【条条大路通罗马】的。一般如果是命令间传递参数,还是管道的好,如果处理输出结果需要重定向到文件,还是用重定向输出比较好。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: