echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
如何创建文件(如果文件不存在),如果文件已存在则覆盖它。现在这个脚本只是附加。
答案 0 :(得分:344)
对* nix管道如何工作的一点了解会有所帮助。
简而言之,>>
重定向运算符会将行附加到指定文件的末尾,其中 - 大于>
的单行将清空并覆盖该文件。
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
答案 1 :(得分:65)
在Bash中,如果您将noclobber设为la set -o noclobber
,则使用语法>|
例如:
echo "some text" >| existing_file
如果文件尚不存在,这也适用
答案 2 :(得分:38)
尽管NylonSmile
's answer,这是“有点”正确..我无法以这种方式覆盖文件..
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
解决我的问题..我必须使用... >!
,ála ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
显然,要小心这个......
答案 3 :(得分:6)
如果您的环境不允许使用>
覆盖,请使用管道|
和tee
代替:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
请注意,这还将打印到标准输出。如果不希望出现这种情况,可以按如下所示将输出重定向到/dev/null
:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
答案 4 :(得分:3)
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
答案 5 :(得分:1)
请注意,如果您希望在设置了noclobber的同时(例如set -o noclobber
)将std :: cerr和std :: cout都重定向到文件,则可以使用代码:
cmd >|file.txt 2>&1
有关此问题的更多信息,请访问https://stackoverflow.com/a/876242。
这个答案也是@TuBui对@BrDaHa答案的问题,它于{'3}}于18年8月9日9:34提供。
答案 6 :(得分:0)
将一个文件的内容覆盖到另一个文件。例如使用猫。
echo "this is foo" > foobar.txt
cat foobar.txt
echo "this is bar" > bar.txt
cat bar.txt
现在要覆盖foobar,我们可以使用如下cat命令
cat bar.txt >> foobar.txt
cat foobar.txt
答案 7 :(得分:-2)
如果您的输出可能有错误,您可能需要使用&符号和大于,如下所示:
my_task &> 'Users/Name/Desktop/task_output.log'
这会将stderr和stdout重定向到日志文件(而不是stdout)。