echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
如何在文件不存在的情况下创建文件,但如果已经存在则覆盖它。目前这个脚本只能追加内容。
>>
重定向操作符会将行追加到指定文件的末尾,而单个大于号 >
则会清空并覆盖文件。
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
echo "aaa" &>| test.txt
会出现错误-bash: syntax error near unexpected token |
。我的noclobber已经开启。 - Tu Buiecho "aaa" >| test.txt 2>&1
或者使用另一个 shell。 - Gerrit-K尽管NylonSmile
的答案“有点”正确,但我无法以这种方式覆盖文件。
echo "我知道管道,女友" > thatAnswer
zsh:文件已存在:thatAnswer
为了解决我的问题,我必须使用>!
, á la ..
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
显然,你要小心处理这个...
NOCLOBBER
。使用setopt clobber
恢复默认行为即可。 - Michał Politowski如果你的环境不允许使用>
覆盖,请使用管道符|
和tee
代替,方法如下:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
请注意,这也会打印到标准输出。如果不希望这样,请按以下方式将输出重定向到/dev/null
:
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
#!/bin/bash
cat <<EOF > SampleFile
Put Some text here
Put some text here
Put some text here
EOF
请注意,如果您想在设置了noclobber(即set -o noclobber
)的情况下将stderr和stdout都重定向到文件中,您可以使用以下代码:
cmd >| file.txt 2>&1
如果要将一个文件的内容覆盖到另一个文件中,可以使用单个大于号,使用两个大于号则会追加。
echo "this is foo" > foobar.txt
cat foobar.txt
> this is foo
echo "this is bar" > foobar.txt
cat foobar.txt
> this is bar
echo "this is foo, again" >> foobar.txt
cat foobar.txt
> this is bar
> this is foo, again
正如其他答案中提到的那样,如果你设置了noclobber
,那么请使用>|
运算符。
ls
,你可以使用cat
。ls | cat>| TheAccount.txt
ls
命令:file=TheAccount.txt && rm -f $file && ls | cat > $file
my_task &> 'Users/Name/Desktop/task_output.log'
这将把stderr和stdout都重定向到日志文件中(而不仅仅是stdout)。