12.1 了解输入和输出
12.1.1 标准文件描述符
linux 使用文件描述符,标识每个文件对象
STDOUT 和 STDERR
STDERR 时shell 发送 错误消息的 目的地,默认情况下 STDERR 和 STDOUT文件描述符
指向相同的位置,即显示器。重定向 STDOUT 不会自动重定向 STDERR
12.1.2 重定向错误
ls -al badfile 2> test4 文件重定向符必须位于 > 前
ls -al test1 test2 test3 2>test5 (文件test1 test2 存在)屏幕会显示1 ,2 信息 ,test3的错误信息
会重定向到test5
2. 重定向错误和数据
如果需要重定向 错误 和 输出, 需要两个 文件重定向符
ls -al test1 test2 test3 2>test5 1>test6
1> 重定向 STDOUT
2> 重定向STDERR
也可以将 STDOUT 和 STDERR 重定向 到一个文件 (&)
ls -al test1 test2 test3 &> test5
12.2 在脚本中重定向输出
12.2.1 临时重定向
如果想故意在脚本中生成错误消息,可以将单个输出行重定向到 STDERR ,需要做的只是使用
输出重定向 符号,将 输出 重定向到 STDERR文件描述,还必须在文件描述符前面添加&
echo "this is a error message" > &2
该行在脚本的STDERR指向的地方,而不是STDOUT指向的地方显示。
12.2.2 永久重定向
exec命令通知shell 在脚本执行期间重定向特定的文件描述
exec 2>testerror
echo "这条语句不会重定向 到testfile "
exec 1> testfile
echo "this is a test of 会重定向"
echo "this is a two 会重定向"
echo "this is a three 会重定向"
exec 启动一个新shell ,并将STDOUT 文件描述符重定向到一个文件,
12.3 在脚本中重定向输入
exec 0 < testfile 应该 从文件 testfile 而不是 STDIN 获取输入
count=1
while read line
do
echo "line #$count : $line"
count=$[ count +1 ]
done
来源:CSDN
作者:hehexu_
链接:https://blog.csdn.net/hehexu_/article/details/104716993