Answers:
稍微了解一下* nix管道的工作原理将有所帮助。
简而言之,>>
重定向操作符会将行添加到指定文件的末尾,其中-大于的>
行将清空并覆盖文件。
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
-bash: TheAccount.txt: cannot overwrite existing file
。
>
和>>
是输出重定向运算符。管道运算符为|
。
>|
强制覆盖现有
在Bash中,如果您设置了noclobber a la set -o noclobber
,那么您将使用以下语法>|
例如:
echo "some text" >| existing_file
如果文件尚不存在,这也适用
echo "aaa" &>| test.txt
导致错误-bash: syntax error near unexpected token |
。我的noclobber设置为开。
echo "aaa" >| test.txt 2>&1
或使用其他外壳。
尽管NylonSmile
答案正确,但“是”正确的..我无法以这种方式覆盖文件。
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
解决我的问题。我不得不用... >!
,A LA ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
显然,对此要小心...
NOCLOBBER
。使用setopt clobber
还原默认行为。
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
请注意,如果您希望在设置了noclobber的同时(例如set -o noclobber
)将std :: cerr和std :: cout都重定向到文件,则可以使用以下代码:
cmd >|file.txt 2>&1
有关此的更多信息,请参见https://stackoverflow.com/a/876242。
另外这个答案是@ TuBui对所提供的答案@BrDaHa问题上面在9:34在8月9日'18。
将一个文件的内容覆盖到另一个文件。使用猫。
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
>>
正在添加,而不是覆盖