Pádraig Brady wrote: > [EMAIL PROTECTED] wrote: > > I redirect the input to the same file as follows > > $ sort testfile > testfile > > the file suddenly gets empty. > > cat warns you, but the file is still truncated.
Perhaps sort should include the same warning? But by that time the deed is already done. > What's happening is the shell is truncating the file, > before the command (sort in your case) reads it. To be complete clear the order of operations is something like this following: * the shell (e.g. /bin/bash) scans the line looking for shell meta-characters and notices the '>'. * the shell redirects output for the upcoming command into the specified output file, >testfile, truncating testfile to zero bytes so that it is ready to be written to by the soon to be invoked command * the shell invokes the command, in this case "sort", with a single file argument * sort reads testfile, sorts it, (it is empty at this point), writes the result to the standard output (still empty) and exits successfully The sort command is invoked *after* the shell has redirected the output to the file and truncated it. As Andreas posted in his message the 'sort -o file file' option is specifically designed to handle sorting files in place. It will read all of the input file completely before writing to the output file. The coreutils manual documents it this way: `-o OUTPUT-FILE' `--output=OUTPUT-FILE' Write output to OUTPUT-FILE instead of standard output. Normally, `sort' reads all input before opening OUTPUT-FILE, so you can safely sort a file in place by using commands like `sort -o F F' and `cat F | sort -o F'. However, `sort' with `--merge' (`-m') can open the output file before reading all input, so a command like `cat F | sort -m -o F - G' is not safe as `sort' might start writing `F' before `cat' is done reading it. On newer systems, `-o' cannot appear after an input file if `POSIXLY_CORRECT' is set, e.g., `sort F -o F'. Portable scripts should specify `-o OUTPUT-FILE' before any input files. Bob _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils