标准输入 (stdin) :代码为 0 ,使用 < 或 << ;
标准输出 (stdout):代码为 1 ,使用 > 或 >> ;
标准错误输出(stderr):代码为 2 ,使用 2> 或 2>> ;
输入重定向中用到的符号及其作用
输出重定向中用到的符号及其作用
对于重定向中的标准输出模式,可以省略文件描述符 1 不写,而错误输出模式的文件描述符 2
是必须要写的。
&表示正确输出和错误输出
&>file是一种特殊的用法,也可以写成>&file,二者的意思完全相同
1> :以覆盖的方法将『正确的数据』输出到指定的文件或装置上;
1>>:以累加的方法将『正确的数据』输出到指定的文件或装置上;
2> :以覆盖的方法将『错误的数据』输出到指定的文件或装置上;
2>>:以累加的方法将『错误的数据』输出到指定的文件或装置上;
『 1>> 』以及『 2>> 』中间是没有空格的
将 stdout 与 stderr 分存到不同的文件去
find /home -name .bashrc > list_right 2>list_error
- /dev/null 垃圾桶黑洞装置与特殊写法
将错误的数据丢弃,屏幕上显示正确的数据
find /home -name .bashrc 2>/dev/null
将指令的数据全部写入名为 list 的文件中
[dmtsai@study ~]$ find /home -name .bashrc > list 2> list <==错误
[dmtsai@study ~]$ find /home -name .bashrc > list 2>&1 <== 正 确
[dmtsai@study ~]$ find /home -name .bashrc &> list <== 正 确
上述表格第一行错误的原因是,由于两股数据同时写入一个文件,又没有使用特殊的语法, 此时两股数据可能会交叉写入该文件内,造成次序的错乱。所以虽然最终 list 文件还是会产生,但是里面的数据排列就会怪怪的,而不是原本屏幕上的输出排序。 至于写入同一个文件的特殊语法如上表所示,你可以使用 2>&1 也可以使用 &>
- standard input : < 与 <<
将原本需要由键盘输入的数据,改由文件内容来取代
利用 cat 指令来建立一个文件的简单流程
cat > catfile
用某个文件的内容来取代键盘的敲击呢?
用 stdin 取代键盘的输入以建立新文件的简单流程
cat > catfile < ~/.bashrc
<< 这个连续两个小于的符号了。 他代表的是『结束的输入字符』的意思!举例来讲:『我要用 cat 直接将输入的讯息输出到 catfile 中, 且当由键盘输入 eof 时,该次输入就结束』,那我可以这样做:
cat > catfile << "eof"
echo "error message" 1>&2
echo "error message" 2> /dev/null 1>&2
第一句屏幕上有信息,第二个屏幕上无信息