输出重定向到原文件

  

因为没理解好输出重定向即管道的区别,哎..昨天踩了一个大坑。 废话少说,直接上命令: 

unexpand -a lcrs.cpp > lcrs.cpp             # 将文件file.txt内的所有空格转换为tabs(作用于expand相反)

结果是:   file.txt 内的内容被清空了(我去,我写了多久的代码T_T, 我以后不敢了)  

于是查了下bash的man手册

 Redirecting Output
       Redirection of output causes the file whose name results from the expansion of word to be opened for writing on file descriptor n, or  the
       standard  output (file descriptor 1) if n is not specified.  If the file does not exist it is created; if it does exist it is truncated to
       zero size.

       The general format for redirecting output is:

              [n]>word

       If the redirection operator is >, and the noclobber option to the set builtin has been enabled, the redirection  will  fail  if  the  file
       whose  name results from the expansion of word exists and is a regular file.  If the redirection operator is >|, or the redirection opera‐
       tor is > and the noclobber option to the set builtin command is not enabled, the redirection is attempted even if the file named  by  word
       exists.

简单说, 就是输出重定向的目标文件不存在的话,就创建空文件。 若文件存在,将文件清空!  因此:

unexpand -a lcrs.cpp > lcrs.cpp     #  > 右边目标文件lcrs.cpp存在,将其清空! unexpand对空文件进行操作,
                 # 再将结果输出到lcrs.cpp中!

                 # for me '>' 这符号具有误导性

How to resolve?      ans: 使用管道配合tee就行了或者使用vim  (还是vim好....)

unexpand -a file | tee file  > /dev/null

为了防止以后手贱, 将输出重定向到原操作文件! 将noclobber选项打开:

set -o noclobber      #  可使用 >| 来overrule 这个选项

 

转载于:https://www.cnblogs.com/xsj24/p/4348310.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值