在脚本中有两个方法实现输出重定向,分别是临时重定向脚本中某一行输出,永久重定向脚本中的所有输出。
临时重定向在脚本中如果想把某行输出重定向到对应的文件描述符,只要在重定向符号和文件描述符之间增加&即可,比如说标准错误,使用>&2。举例如下:
#/bin/bash
date >&2
echo "date is $(date)"
当不加重定位文件运行时,即:
./test49.sh
屏幕上显示结果为:
2019年 12月 23日 星期一 22:55:34 CST
date is 2019年 12月 23日 星期一 22:55:34 CST
若以重定向运行,即./test49.sh >file
屏幕上显示:
2019年 12月 23日 星期一 22:56:18 CST
file的内容为:
date is 2019年 12月 23日 星期一 22:56:18 CST
永久重定向临时重定向只能对加了&符号的语句生效,可以如果想要把脚本中的多个输出都重定向的话就需要每一个输出都加上,这比较麻烦。但是通过永久重定向可以解决这个问题。永久重定向通过exec命令。比如
#/bin/bash
exec 1>testfile
date
echo "wu lin wai zhuan"
date
运行后,打开testfile,内容为:
2019年 12月 24日 星期二 22:52:13 CST
wu lin wai zhuan
2019年 12月 24日 星期二 22:52:13 CST
上面的exec命令是把标准输出重定向到testfile中,并且对整个shell的输出生效。
注意上面的exec是启动了一个新进程并完成重定向。
有时候一个shell脚本中,想要向不同的文件重定向,或者不同的fd重定向到不同的文件,也可以使用exec做到。比如
#/bin/bash
exec 2>errfile
echo "normal line 1"
echo "normal line 2"
exec 1>normalfile
echo "normal line 3"
echos "error line 2"
运行后,屏幕输出:
normal line 1
normal line 2
normalfile内容为:
normal line 3
errfile内容为:
echos: 未找到命令
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved