0–标准输入;1–标准输出;2–标准错误
可以使用符号“>>”将数据追加到某个文件
通过ls -al badfile 2>test.txt
的方式将错误信息重定向至 test.txt 并且不在屏幕上显示,如果想重定向标准输出信息,只需将2改为1
如果想重定向错误和正常输出,必须用两个重定向符号,例如:
ls -al test test2 test3 badtest 2> test6 1> test7
除此之外,也可将标准输出和标准错误信息通过特殊重定向符号“&>”输出至同一个输出文件
在脚本中重定向输出
临时重定向
如果有意在脚本中生成错误消息,可以单独将这一行重定向至STDERR:使用输出重定向符来将输出信息重定向到STDERR文件描述符在重定向到文件描述符时,必须在文件描述符数字之前加一个&。默认情况下Linux会将STDERR导向STDOUT
#!/bin/bash
echo "this is an error message" >&2
echo "this is a normal message"
$
$ bash test 2>test.txt
this is normal message
$ cat test.txt
this is an error message
永久重定向
exec 2>testout
在脚本中重定向输入
#!/bin/bash
count=1
exec 0< testfile
while read line
do
echo "Line $count : $line"
count=$[ $count + 1 ]
done
创建自己的重定向
除了0、1、2三个默认文件描述符外,6~8也可用于输入和输出的重定向
exec 3>&1 #将文件描述符3重定向到标准输出
exec 1>testout #将标准输出重定向到文件
... ...
exec 1>&3 #将标准输出重定向到描述符3,其实就是输出至屏幕
这是一种在脚本中临时重定向输出,然后又恢复默认输出设置的常用方法。同样,对于标准输入也可以采用以上的方法
exec 6<&0
exec 0<testfile
... ...
exec 0<&6
一种快速清除文件内容的方法
cat /dev/null > testfile
在输出重定向中将/dev/null作为输入文件,由于其中并不包含任何内容,通常用它来快速清除现有文件中的数据,而不用先删除文件再重新创建文件
创建临时文件和目录
默认情况下,mktemp会在本地目录创建一个文件
$ mktemp testing.XXXXXX
通过这种方式,可以保证文件名在目录中是唯一的
在脚本中,可以在创建临时文件的同时,将其文件名保存至变量中(并不需要临时文件具体名字是什么)
tempfile=$(mktemp test19.XXXXXX)
exec 3>$tempfile
记录消息 tee命令
tee filename
该命令将STDIN过来的数据发往两处,一处是STDOUT,另一处是tee命令所指定的文件
该命令具有-a参数,使用该参数可以将数据追加到指定文件中(而不是覆盖)