If you have output that can have errors, you may want to use an ampersand and a greater than, as follows:
my_task &> 'Users/Name/Desktop/task_output.log'
this will redirect both stderr and stdout to the log file (instead of stdout only).
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
If your environment doesn't allow overwriting with >
, use pipe |
and tee
instead as follows:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
Note this will also print to the stdout. In case this is unwanted, you can redirect the output to /dev/null
as follows:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
Just noting that if you wish to redirect both stderr and stdout to a file while you have noclobber set (i.e. set -o noclobber
), you can use the code:
cmd >| file.txt 2>&1
More information about this can be seen at https://stackoverflow.com/a/876242.
Also this answer's @TuBui's question on the answer @BrDaHa provided above at Aug 9 '18 at 9:34.
In Bash, if you have set noclobber a la set -o noclobber
, then you use the syntax >|
For example:
echo "some text" >| existing_file
This also works if the file doesn't exist yet
Despite NylonSmile
's answer, which is "sort of" correct.. I was unable to overwrite files, in this manner..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
to solve my issues.. I had to use... >!
, รก la..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
Obviously, be careful with this...
Source: Stackoverflow.com