最近在看shell 脚本命令 : 重定向 :即重新改变输入输出的来源
希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可
希望想将在终端输出的信息保存到文件,直接在命令后面加上> filename即可
echo “字符串” > test.txt
echo “字符串” | tee test.txt
Shell允许打开至多10个文件,文件描述符从0,1,2,…,9
- 文件描述符0,表示标准输入
- 文件描述符1,表示标准输出
- 文件描述符2,表示标准错误输出
在当前路径下 执行.sh 文件
./test.sh
如果没有其权限:
chmod+x[文件路径]查看当前目录结构
c
h
m
o
d
+
x
[
文
件
路
径
]
查
看
当
前
目
录
结
构
tree
当前文件夹下的目录结构 如上图
在我们执行ls test.txt b.txt之后,一共有两种输出,其中ls: 无法访问b.txt: 没有那个文件或目录是错误输出,test.txt是标准输出。
在上述命令中,我们将原来的标准输出重定向到了out文件中,所以控制台只剩下了错误提示。
高级用法
我们来看
/dev/null 2>&1
这条命令其实分为两命令,一个是>/dev/null,另一个是2>&1。
- >/dev/null
这条命令的作用是将标准输出1重定向到/dev/null中。/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称“黑洞”。那么执行了>/dev/null之后,标准输出就会不再存在,没有任何地方能够找到输出的内容。
- 2>&1
这条命令用到了重定向绑定,采用&可以将两个输出绑定在一起。这条命令的作用是错误输出将和标准输出同用一个文件描述符,说人话就是错误输出将会和标准输出输出到同一个地方。
- “>/dev/null”等同于”1>/dev/null” .
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。
- 2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
linux在执行shell命令之前,就会确定好所有的输入输出位置,并且从左到右依次执行重定向的命令,所以>/dev/null 2>&1的作用就是让标准输出重定向到/dev/null中(丢弃标准输出),然后错误输出由于重用了标准输出的描述符,所以错误输出也被定向到了/dev/null中,错误输出同样也被丢弃了。执行了这条命令之后,该条shell命令将不会输出任何信息到控制台,也不会有任何信息输出到文件中。
欢迎技术交流: science168@126.com