一、问题描述
我们在进行文件操作时经常会用到覆盖输出重定向(>),追加输出重定向(>>),很明显的看出两种输出重定向的符号相差不是很大,但是两种的意义却又很大的差别:前者是会覆盖文件的内容的,而后者并不会覆盖文件的内容!我们在使用追加输出重定向时极有可能由于自己的不小心而使用覆盖重定向,从而导致文件内容的丢失,但是linux系统还是可以解决这种问题的。
二、问题演示
[[email protected]~]# echo "cangls" > /root/test.txt [[email protected]~]# cat /root/test.txt cangls [[email protected]~]# echo "longls" > /root/test.txt [[email protected]~]# cat /root/test.txt longls [[email protected]~]# echo "cangls" >> /root/test.txt [[email protected]~]# cat /root/test.txt longls cangls
通过上例可以很明显的看到使用>覆盖输出重定向会把文件test.txt的内容给删除,而使用>>追加输出输出重定向并不会把文件的内容给弄丢失,下面介绍如何使用小技巧把这种问题尽可能的杜绝。
三、技巧使用
set -C:禁止覆盖重定向至已经存在的文件
set +C:关闭上述特性:
>|:在-C 特性下,强制使用覆盖重定向
[[email protected]~]# set -C [[email protected]~]# echo "xiaozels" > /root/test.txt -bash: /root/test.txt: cannot overwrite existing file [[email protected]~]# echo "xiaozels" >> /root/test.txt [[email protected]~]# cat /root/test.txt longls cangls xiaozels [[email protected] ~]# echo "xiaozels" >| /root/test.txt [[email protected] ~]# cat /root/test.txt xiaozels [[email protected] ~]# set +C [[email protected] ~]# echo "bols" > /root/test.txt [[email protected] ~]# cat /root/test.txt bols
通过上面的例子可以看到使用set -C命令就可以把覆盖输出重定向的功能给关闭,但有时候还是要使用这功能咋办?显然可以用set +C 命令就可以了,但若我们又忘记关闭了咋办?显然系统还是有相应的办法的,就是在使用覆盖重定向时在后面加个|符号就可以继续使用覆盖重定向的功能了。最后今后在遇到类是可以改变文件内容的命令一定要小心!不要因为自己的一时大意而酿成不必要的后果!
时间: 2024-12-30 00:04:12