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

来源:互联网 发布:mac管理桌面图标 编辑:程序博客网 时间:2024/06/05 04:04

今天在使用重定向<的时候,不小心把一个空的文件重定向到刚写完的程序中,导致白写了;想在网上找挽回的措施,结果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 longlscangls

通过上例可以很明显的看到使用>覆盖输出重定向会把文件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 longlscanglsxiaozels[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 0
原创粉丝点击