【解释】
重定向: 是动作,一种操作的action行为
文件描述符: 名词,文件的另一种表示,linux一切皆文件。
【基础重定向形式】
追加用途星级: ***** 一、< 用法: cat 作为代表
cat功能:Concatenate FILE(s), or standard input, to standard output.
1 连接文件,输出到标准输出(即打印到屏幕)
2 标准输入,到标准输出(即打印到屏幕)
cat /etc/issue 等于 cat < /etc/issue
但是左边用的是cat第一种功能, 右边用的是cat的第二种功能。
二、 youfile
2 清空文件内容,在把新内容写入
echo "you content" > file.txt
四、>> 追加的用法 把内容追加到文件中
echo "test message" >> /var/log/message
【基础文件描述符形式】
数字代号意义用途0标准输入 STDIN*****1标准输出 STDOUT*****2错误输出 STDERR***** 【文件描述符和重定向的结合】
默认
< 等于 0< 标准输入
> 等于 1> 标注输出重定向
>> 等于1>> 标准输出追加
其他
2> 就只能 2> 错误输出重定向
2>> 就只能 >> 错误输出追加
&> 等于 > file 2>&1 标准输出和错误输出 重定向,只打开了一次文件。
&>> 等于 >> file 2>&1 标准输出和错误输出 追加,只打开了一次文件。
这里有一点需要理解,
为什么是
&>> 等于 >> file 2>&1 而不是 >> file 2>>&1 这个会报错。
因为开始打开文件file,是追加形式,所以2>&1 就可以表示的是把错误输出到那个文件中即可(文件已已经打开且光标已经在行尾)。
重定向和追加的区别是:第一次打开文件的时候,是否把文件清空,定义光标的开始处。从首行第一个字符开始写入。
方式+写入=结果
分析一下几个echo
echo "abc" > test.txt
echo "error" >> text.txt
echo "abc" >&2 #这一行表示的是错误输出 等于echo "abc" 1>&2,前面是一个默认简写而已
【自定义文件描述符】
创建自己的重定向,在shell中不局限与 0 1 2 这个三个默认的文件描述符。其实在shell中最多可以有9个打开的文件描述符。其他6个分别是3-8。并且可以当作输入输出重定向都可以。
可以将这些文件描述符中的任意一个分配给一个文件。
例子1:创建输出文件描述符
[root@master std]# cat test.sh
#/bin/bash
exec 3> file3.txt
echo "first line 1"
echo "first line 3" >&3
注:exec执行将文件描述符3重定向到file3.txt这个文件中。
体会下结果吧
[root@master std]# sh test.sh
first line 1
[root@master std]# cat file3.txt
first line 3
例子2: 脚本中文件作为重定向输入
#/bin/bash
exec 0< /etc/issue
while read line; do
echo $line
done
解释: 将文件/etc/issue 作为0文件描述符的输入。
read line默认为从文件描述符0(键盘)读入,二此时exec已经定义了输入来自/etc/issue文件,所以read 会去读/etc/issue这个文件,把当读取的一行的内容,赋值给line这个变量。while在循环读取文件中的一下行.....
等价于
#/bin/bash
cat /etc/issue |while read line; do
echo $line
done
例子3: 关闭打开的文件描述符
#/bin/bash
exec 3>> /etc/issue
echo "this is last file" >&3
exec 3>&-
echo "test output" >&3
注意:一旦关闭了文件描述符,就不能在脚本中向它写入任何数据了,否则shell会生成错误消息。
[root@master std]# sh test.sh
test.sh: line 7: 3: Bad file descriptor
【至此】
你一定会很关系exec这个命令是干嘛的? 和source 和sh执行一个脚本有何不同?
看下篇。
运维网声明
1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网 享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com