编写Bash脚本或在Linux命令行上工作时,最常见的任务之一是读写文件。
本文介绍了如何使用重定向操作符和tee
命令或者在bash脚本将文本写入文件。
在Bash中,输出的重定向使您可以从命令捕获输出并将其写入文件。
将输出重定向和写入文件的一般格式如下:
output > filename
output >> filename
>
重定向运算符将输出写入指定文件。 如果文件存在,则将其截断为零长度。 否则,将创建文件。 使用此运算符时要格外小心,因为您可能会覆盖重要文件。>>
重定向运算符会将输出追加到给定文件。 如果文件不存在,则会创建该文件。您需要具有对该文件的写入权限。 否则,您将收到拒绝权限错误。
这是一个简单的示例,显示了如何将echo
命令的输出重定向到文件:
echo "this is a line" > file.txt
为防止覆盖现有文件,请使用内置的set
启用“ noclobber”选项:
set -o noclobber
echo "this is a line" > file.txt
bash: file.txt: cannot overwrite existing file
>|
运算符可让您覆盖Bash的“ noclobber”选项:
set -o noclobber
echo "this is a line" >| file.txt
>>
运算符将输出追加到文件末尾,而不是覆盖文件:
echo "this is a line" >> file.txt
使用printf
命令创建复杂的输出:
printf "Hello, I'm %s.\n" $USER > file.txt
如果要将多个行写入文件,请使用heredoc文档(Heredoc)重定向。
例如,您可以将内容传递到cat
命令并将其写入文件:
cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
要添加这些行,请在文件名之前将>
更改为>>
:
cat << EOF >> file.txt
The current working directory is: $PWD
You are logged in as $(whoami)
EOF
您可以将任何命令的输出写入文件:
date +"Year: %Y, Month: %m, Day: %d" > file.txt
date
命令的输出将被写入文件。
tee
命令写入文件tee
命令从标准输入读取并同时写入标准输出和一个或多个文件。
echo "this is a line" | tee file.txt
tee
命令的默认行为是覆盖指定的文件,与>
运算符相同。 要将输出附加到文件,请使用-a
(--append
)选项调用命令:
echo "this is a line" | tee -a file.txt
如果您不希望tee
写入标准输出,则可以将其重定向到/dev/null
:
echo "this is a line" | tee file.txt >/dev/null
要将文本写入多个文件,请将文件指定为tee
命令的参数:
echo "this is a line" | tee file_1.txt file_2.txt file_3.txt
tee
命令的另一个优点是,您可以将其与sudo
结合使用,并写入其他用户拥有的文件。 要将文本追加到您没有写权限的文件中,请在tee
之前加 sudo
:
echo "this is a line" | sudo tee file.txt
echo
命令输出作为输入传递到tee
,这将提升sudo权限并将文本写入文件。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有