echo "text" >> 'Users/Name/Desktop/TheAccount.txt'
我怎样才能让它创建一个不存在的文件,但是如果它已经存在的话,它会覆盖它,现在这个脚本只是附加。
kxe2p93d1#
>>重定向操作符将把行附加到指定文件的末尾,其中大于>的-as将清空并覆盖该文件。
>>
>
echo "text" > 'Users/Name/Desktop/TheAccount.txt'
9gm1akwq2#
在Bash中,如果已经将noclobber设置为la set -o noclobber,则使用语法>|例如:
set -o noclobber
>|
echo "some text" >| existing_file
如果文件尚不存在,此操作也有效
set -o | grep noclobber
wqnecbli3#
尽管NylonSmile 's answer,这是“排序”正确..我无法覆盖文件,以这种方式..echo "i know about Pipes, girlfriend" > thatAnswerzsh: file exists: thatAnswer为了解决我的问题..我不得不使用... >!,á la..
NylonSmile
echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
>!
[[ $FORCE_IT == 'YES' ]] && echo "$@" >! "$X" || echo "$@" > "$X"
很明显,小心点...
drkbr07n4#
如果您的环境不允许使用>覆盖,请使用管道|和tee,如下所示:
|
tee
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt'
注意这也会打印到stdout。如果不需要这样做,您可以将输出重定向到/dev/null,如下所示:
/dev/null
echo "text" | tee 'Users/Name/Desktop/TheAccount.txt' > /dev/null
lo8azlld5#
#!/bin/bash cat <<EOF > SampleFile Put Some text here Put some text here Put some text here EOF
voase2hg6#
需要注意的是,如果您希望在设置了noclobber(即set -o noclobber)的情况下将stderr和stdout重定向到一个文件,可以使用以下代码:
cmd >| file.txt 2>&1
有关这方面的更多信息,请访问https://stackoverflow.com/a/876242。此外,这个答案的@TuBui的问题的答案@BrDaHa提供了above在8月9日'18在9时34分。
piztneat7#
如果文本是命令(如ls)的输出,则可以使用cat。设置noclobber时:
ls
cat
ls | cat>| TheAccount.txt
否则,您可以合并强制删除(无论文件是否存在)和ls命令:
file=TheAccount.txt && rm -f $file && ls | cat > $file
yqhsw0fo8#
要将一个文件的内容覆盖到另一个文件,请使用单个大于号,使用两个将追加。
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,则使用>|运算符。
noclobber
r1wp621o9#
如果您的输出可能有错误,则可能需要使用与号和大于号,如下所示:my_task &> 'Users/Name/Desktop/task_output.log'这会将stderr和stdout重定向到日志文件(而不是仅重定向到stdout)。
my_task &> 'Users/Name/Desktop/task_output.log'
9条答案
按热度按时间kxe2p93d1#
>>
重定向操作符将把行附加到指定文件的末尾,其中大于>
的-as将清空并覆盖该文件。9gm1akwq2#
在Bash中,如果已经将noclobber设置为la
set -o noclobber
,则使用语法>|
例如:
如果文件尚不存在,此操作也有效
set -o | grep noclobber
wqnecbli3#
尽管
NylonSmile
's answer,这是“排序”正确..我无法覆盖文件,以这种方式..echo "i know about Pipes, girlfriend" > thatAnswer
zsh: file exists: thatAnswer
为了解决我的问题..我不得不使用...
>!
,á la..很明显,小心点...
drkbr07n4#
如果您的环境不允许使用
>
覆盖,请使用管道|
和tee
,如下所示:注意这也会打印到stdout。如果不需要这样做,您可以将输出重定向到
/dev/null
,如下所示:lo8azlld5#
voase2hg6#
需要注意的是,如果您希望在设置了noclobber(即
set -o noclobber
)的情况下将stderr和stdout重定向到一个文件,可以使用以下代码:有关这方面的更多信息,请访问https://stackoverflow.com/a/876242。
此外,这个答案的@TuBui的问题的答案@BrDaHa提供了above在8月9日'18在9时34分。
piztneat7#
如果文本是命令(如
ls
)的输出,则可以使用cat
。设置noclobber时:
否则,您可以合并强制删除(无论文件是否存在)和
ls
命令:yqhsw0fo8#
要将一个文件的内容覆盖到另一个文件,请使用单个大于号,使用两个将追加。
如其他答案中所述,如果设置了
noclobber
,则使用>|
运算符。r1wp621o9#
如果您的输出可能有错误,则可能需要使用与号和大于号,如下所示:
my_task &> 'Users/Name/Desktop/task_output.log'
这会将stderr和stdout重定向到日志文件(而不是仅重定向到stdout)。