输出重定向到原文件

  

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

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 这个选项
时间: 2024-11-05 11:46:25

输出重定向到原文件的相关文章

第四单元   输出重定向及文件名 / 文件内容的字符搜索

第四单元 1.在student用户下执行find /etc -name passwd 命令,并管理其输出要求如下: * 显示所有正确输出,屏蔽错误输出 [[email protected] Desktop]$ find /etc -name passwd 2 > /dev/null  ###/dev/null为文件不可回收垃圾箱位置 * 保存正确数出到/mnt/find.out,错误数出到/mnt/find.err中 [[email protected] Desktop]$ find /etc

shell--10、Shell 输入/输出重定向

大多数 UNIX 系统命令从你的终端接受输入并将所产生的输出发送回到您的终端.一个命令通常从一个叫标准输入的地方读取输入,默认情况下,这恰好是你的终端.同样,一个命令通常将其输出写入到标准输出,默认情况下,这也是你的终端. 重定向命令列表如下: 命令 说明 command > file 将输出重定向到 file. command < file 将输入重定向到 file. command >> file 将输出以追加的方式重定向到 file. n > file 将文件描述符为

如何关闭linux系统中的覆盖输出重定向(&gt;)功能

一.问题描述 我们在进行文件操作时经常会用到覆盖输出重定向(>),追加输出重定向(>>),很明显的看出两种输出重定向的符号相差不是很大,但是两种的意义却又很大的差别:前者是会覆盖文件的内容的,而后者并不会覆盖文件的内容!我们在使用追加输出重定向时极有可能由于自己的不小心而使用覆盖重定向,从而导致文件内容的丢失,但是linux系统还是可以解决这种问题的. 二.问题演示 [[email protected]~]# echo "cangls" > /root/test

输出重定向

1 关于标准输入和输出 键盘 0 标准输入 显示屏 1 标准输出 显示屏    2 标准错误输出 2 输出重定向 1)标准输出重定向 命令 >  文件 以覆盖的方式将命令的正确输出输入到指定文件或者设备中 命令 >>  文件   以追加的方式将正确命令输出到指定的文件或者系统中 2)标准错误输出重定向 错误命令 2>文件 以覆盖的方式错误命令输出到指定文件或者设备中 错误命令 2>文件 以追加的方式将错误的命令输出到指定的文件或者系统中 注意:标准错误输出重定向中  2>

sudo 与输出重定向

本文介绍如何使用 sudo 将输出重定向到当前用户没有权限的文件.注意:本文中 demo 的演示环境为 ubuntu 18.04. Permission denied 问题 如果当前用户没有某个文件的写权限,又要通过输出重定向往该文件中写入内容.结果只能是 "Permission denied".比如当前用户为 nick,下面的命令视图查询 /root 目录下的文件并把结果写入到 /root/test.txt 文件中(注意:用户 nick 没有对 /root/test.txt 文件的写

Python 命令输出重定向有缓存的问题

将 Python 命令的输出重定向到日志文件的时候,发现输出并不会写到日志文件里 原因是 Python 做了缓存,要把缓存去掉,需要加参数 -u 比如 nohup python -u test.py > test.log 2>&1 & 原文地址:https://www.cnblogs.com/moonlight-lin/p/12239467.html

C/C++-标准输入/输出重定向为文件输入/输出

/* Time: 2017-02-22 11:11:15 Describe: C++程序将标准输入/输出重定向为文件输入/输出. */ #include <iostream> #include <fstream> #include <string> using namespace std; void f() { string line; while(getline(cin, line)) //input from the file in.txt { cout <&

Linux标准输入、输出和错误和文件重定向(转)

标准输入.输出和错误 当我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件.由于文件描述符不容易记忆,shell同时也给出了相应的文件名.下面就是这些文件描述符及它们通常所对应的文件名: 文件文件描述符输入文件—标准输入0:它是命令的输入,缺省是键盘,也可以是文件或其他命令的输出.输出文件—标准输出1:它是命令的输出,缺省是屏幕,也可以是文件.错误输出文件—标准错误2:这是命令错误的输出,缺省是屏幕,同样也可以是文件. 系统中实际上有1 2个文件描

Make 输出重定向到文件

系统的输入与输出: 方式 描述符 含义 stdin 0 标准输入 stdout 1 标准输出 stderr 2 标准错误输出 把 make 输出的全部信息重定向到某个文件中: make <xxx> > build_output 把错误信息都输出到一个文件中: make <xxx> > build_output_all 2>&1 其中的 2>&1 表示错误信息输出到 &1 中,&1 指的是前面的那个文件 build_output