Lazy Redirector
Some of the best ideas are the simplest, and here's an example...
When using linux/unix command line, a common mistake is to attempt to read a file, process it and redirect the results to the same file :
sort mylist.txt > mylist.txt
This won't work though (as mylist.txt is overwritten before the sort process even starts).
Here's my solution :
In a file called "lazyredirect" somewhere on your PATH :
#!/bin/bash
#
# Takes stdin, and redirects is to a file once stdin has been closed (i.e. after the
# process that generates the input is complete)
#
# Usage :
# lazyredirect FILE
#
# Example :
# sort mylist.txt | lazyredirect mylist.txt
#
TMP_FILE="$1-lazyredirect~$$~"
cat > "${TMP_FILE}"
mv -- "${TMP_FILE}" "$1"
Now to sort that file :
sort mylist.txt | lazyredirect mylist.txt