echo "text" >> 'Users/Name/Desktop/TheAccount.txt'

我如何使它在文件不存在时创建它,而在文件已经存在时覆盖它。现在这个脚本只是追加。


当前回答

尽管NylonSmile的回答“有点”正确。我无法覆盖文件,以这种方式..

“我知道Pipes的事,女朋友”>那个答案

zsh: file exists: thatAnswer . txt

解决我的问题…我不得不用…>!, á la..

[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"

显然,要小心这个……

其他回答

如果您的环境不允许使用>覆盖,请使用管道|和tee,如下所示:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'

注意,这也将打印到标准输出。如果不需要,您可以将输出重定向到/dev/null,如下所示:

echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null

>>重定向操作符将把行追加到指定文件的末尾,而大于>的单个操作符将为空并覆盖文件。

echo "text" > 'Users/Name/Desktop/TheAccount.txt'
#!/bin/bash

cat <<EOF > SampleFile

Put Some text here 
Put some text here
Put some text here

EOF

只是注意,如果你想重定向stderr和stdout到一个文件,而你有noclobber设置(即set -o noclobber),你可以使用以下代码:

cmd >| file.txt 2>&1

更多信息请访问https://stackoverflow.com/a/876242。

另外,这个答案是@TuBui在18年8月9日9点34分对@BrDaHa的回答提出的问题。

如果你的输出可能有错误,你可能想要使用&号和大于,如下所示:

my_task &> 'Users/Name/Desktop/task_output.log'这将把stderr和stdout重定向到日志文件(而不仅仅是stdout)。