重定向是Linux系统中一个好东西啊,可以对命令执行结果灵活处理且对输入也比较freedom;尤其对新编写的脚本进行排错的方式更是受用
声明:test test1 test2文件存在,badtest文件不存在
1、标准输入
a. cat < test 或 cat 0< test
b. cat << EOF >>test3
xxxxxx
yyyyyy
EOF
2、ls -al badtest 2>test4 会把文件不存在的信息输出到test4中
ls -al test test1 test2 badtest 2>test6 1>test7 把badtest不存在的信息输出到test6中,test test1 test2文件属性信息输出到test7中
这里如果愿意,你也可以将STDERR和STDOUT输出到同一个文件;bash shell提供了特殊的重定向符号 "&>"
ls -al test test1 test2 badtest &> test7 会将所有的输出结果输出到test7文件中;bash会自动给错误消息分配更高优先级,错误消息集中放到test7前部分,正常输出到test7后部分
文章开头提到重定向应用到新编写脚本排错中,这里介绍具体操作,很简单就一条命令,这里的关键是命令放置的位置;
将下面两条exec放到脚本开头的话全局生效,通常情况下都是有针对性的对某段shell进行拍错,将exec 2> testerror放置该段脚本之前,对从文档开头到拍错脚本这段代码不生效,本次编写一键安装lnmp时不知道有这个命令导致一大堆的输出结果翻来翻去,还特别容易漏掉,如php redis扩展包等
exec 1 > testout
exec 2 >testerror
注:加入用户不想输出任何信息,可以ls -al > /dev/null or ls -al >/dev/null 2>&1
这里第2个顺序很重要,先把标准输出重定向到文件,再把标准错误输出到标准输出,因为标准输出已经重定向到文件,所以标准错误与重定向到文件
阅读(469) | 评论(0) | 转发(0) |