Using the same file for stdin and stdout with redirection

后端 未结 3 616
误落风尘
误落风尘 2020-12-30 04:56

I\'m writing a application that acts like a filter: it reads input from a file (stdin), processes, and write output to another file (stdout). The input file is completely re

3条回答
  •  不知归路
    2020-12-30 05:26

    The shell is what clobbers your output file, as it's preparing the output filehandles before executing your program. There's no way to make your program read the input before the shell clobbers the file in a single shell command line.

    You need to use two commands, either moving or copying the file before reading it:

    mv file.txt filecopy.txt
    ./myprog < filecopy.txt > file.txt
    

    Or else outputting to a copy and then replacing the original:

    ./myprog < file.txt > filecopy.txt
    mv filecopy.txt file.txt
    

    If you can't do that, then you need to pass the filename to your program, which opens the file in read/write mode, and handles all the I/O internally.

    ./myprog file.txt                 # reads and writes according to its own rules
    

提交回复
热议问题