Linux 文件重定向;文件描述符复制(>&,>&-);exec操作文件描述符

文件重定向

  • 标准输入文件(stdin):键盘 FD0 (FD:文件描述符)
  • 标准输出文件(stdout):显示器 FD1
  • 标准错误文件(stderr):显示器 FD2
    输入,输出,错误重定向本文不再叙述,可参考输出,输出,错误重定向

文件描述符复制

除了上面提到的默认的文件描述符外,我们也可以使用文件描述符复制>&来自定义文件描述符:

exec 3>&1  1>temp.txt
echo "Hello World"   # 显示器上并不会有输出
cat temp.txt   # 数据到了文件里
Hello World
exec 1>&3
echo "Hello World"
Hello World

上例中,我们通过复制FD1,自定义了FD3,FD3具有和FD1相同的数据流指向,即显示器;之后重定向了FD1,使其指向了temp.txt文件,所以当执行第一句echo指令时,显示器上并不会展示,因为数据流流向了temp.txt文件;然后我们又通过FD复制,将FD1指向FD3,此时数据流流向FD3指向的目标,即显示器,需要解释一下的是,因为FD1是原本就存在的,所以此时的复制功能更接近于重定向,之后的echo语句,则会在显示器上输出。
注意
文件描述符复制符号两侧只能是文件描述符,一下下是非法展示

exec 3>&temp.txt

>&-作用是删除自定义的文件描述符,如

exec 3>&1   # 根据FD1,复制FD3
exec 3>&-  # 删除FD3

exec操作文件描述符

exec命令可以操作文件描述符,而且使用exec操作文件描述符所进行的文件重定向,作用域是全局的。

exec 1>test.txt;echo "Hello World"  # no show
echo "Hello World" # also no show
exec 1>/dev/tty
echo "Hello World"
Hello World

上例中,通过exec操作FD1后,接下来使用echo都不会输出到显示器上,之后再次通过exec重定向后,才会输出到显示器上。
与之相对应的是,若在指令后嵌入重定向操作,则重定向的作用域只有本条指令。

echo "Hello World" >test.txt   
echo "Hello World"
Hell World

&>file

此符号的作用是标准输出和标注错误都写入文件,与下面语句等价:

exec  >file  2>&1

注意,顺序不能反,为什么自己想一想!

参考

Bash指南4篇(极好的文章,强烈建议阅读)
Linux shell中2>&1的含义解释

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值