谨慎使用输出重定向(>)

今天在使用重定向<的时候,不小心把一个空的文件重定向到刚写完的程序中,导致白写了;想在网上找挽回的措施,结果linux没有办法可以挽回;就看到这篇文章,分享出来!避免“悲剧重演”
转资51CTO:http://cuchadanfan.blog.51cto.com/9940284/1670308
一、问题描述
我们在进行文件操作时经常会用到覆盖输出重定向(>),追加输出重定向(>>),很明显的看出两种输出重定向的符号相差不是很大,但是两种的意义却又很大的差别:前者是会覆盖文件的内容的,而后者并不会覆盖文件的内容!我们在使用追加输出重定向时极有可能由于自己的不小心而使用覆盖重定向,从而导致文件内容的丢失,但是linux系统还是可以解决这种问题的。
二、问题演示


[root@hpf-linux~]# echo "cangls" > /root/test.txt 
[root@hpf-linux~]# cat /root/test.txt 
cangls
[root@hpf-linux~]# echo "longls" > /root/test.txt 
[root@hpf-linux~]# cat /root/test.txt 
longls
[root@hpf-linux~]# echo "cangls" >> /root/test.txt 
[root@hpf-linux~]# cat /root/test.txt 
longls
cangls

通过上例可以很明显的看到使用>覆盖输出重定向会把文件test.txt的内容给删除,而使用>>追加输出输出重定向并不会把文件的内容给弄丢失,下面介绍如何使用小技巧把这种问题尽可能的杜绝。
三、技巧使用

set -C:禁止覆盖重定向至已经存在的文件

set +C:关闭上述特性:
>|:在-C 特性下,强制使用覆盖重定向


[root@hpf-linux~]# set -C 
[root@hpf-linux~]# echo "xiaozels" > /root/test.txt 
-bash: /root/test.txt: cannot overwrite existing file
[root@hpf-linux~]# echo "xiaozels" >> /root/test.txt 
[root@hpf-linux~]# cat /root/test.txt 
longls
cangls
xiaozels
[root@hpf-linux ~]# echo "xiaozels" >| /root/test.txt 
[root@hpf-linux ~]# cat /root/test.txt 
xiaozels
[root@hpf-linux ~]# set +C 
[root@hpf-linux ~]# echo "bols" > /root/test.txt 
[root@hpf-linux ~]# cat /root/test.txt 
bols

通过上面的例子可以看到使用set -C命令就可以把覆盖输出重定向的功能给关闭,但有时候还是要使用这功能咋办?显然可以用set +C 命令就可以了,但若我们又忘记关闭了咋办?显然系统还是有相应的办法的,就是在使用覆盖重定向时在后面加个|符号就可以继续使用覆盖重定向的功能了。最后今后在遇到类是可以改变文件内容的命令一定要小心!不要因为自己的一时大意而酿成不必要的后果!

原始出处:http://cuchadanfan.blog.51cto.com/9940284/1670308

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值