


























在 Linux 系统中, cat 和 tee 命令是处理文件内容的常用工具. 本文详细介绍这两个命令写入文件的各种方式, 特别是 heredoc 语法中 EOF 引号和连字符的作用.
cat 命令可以通过重定向操作符将内容写入文件:
# 覆盖写入
cat > filename
# 追加写入
cat >> filename
tee 命令可以同时将输出写入文件和显示在终端:
# 覆盖写入
echo "内容" | tee filename
# 追加写入
echo "内容" | tee -a filename
heredoc (Here Document) 是一种在 shell 中处理多行文本的强大语法, 可以与 cat 和 tee 命令结合使用.
# 与 cat 结合
cat > file.txt << EOF
这是第一行内容
变量值: $USER
EOF
# 与 tee 结合
tee filename << EOF
这是多行内容
会同时显示在终端和写入文件
EOF
不加引号 (默认): 变量和命令会被展开
name="张三"
cat << EOF
用户名: $name
当前目录: $PWD
EOF
加引号 (单引号或双引号): 禁止变量展开, 按字面意思输出
cat << 'EOF'
用户名: $name
当前目录: $PWD
EOF
连字符 - 会移除 heredoc 内容行首的制表符 (tab):
# 不使用连字符 - tab 会保留
cat << EOF
这行前面有 tab
EOF
# 使用连字符 - tab 会被移除
cat <<- EOF
这行前面有 tab, 会被移除
EOF
注意: 只移除制表符 (tab), 不移除空格, 且必须是真正的 tab 字符
# 创建包含 $ 符号的配置文件 (使用引号防止变量展开)
cat > app.conf << 'EOF'
database_url = "mysql://user:$password@localhost/db"
api_key = "$API_SECRET_KEY"
log_format = "${timestamp} ${level} ${message}"
EOF
# 在函数中使用 heredoc (连字符保持代码可读性)
create_nginx_config() {
local domain=$1
local port=$2
if [ -n "$domain" ]; then
cat > "/etc/nginx/sites-available/$domain" <<- EOF
server {
listen $port;
server_name $domain;
root /var/www/$domain;
location / {
try_files \$uri \$uri/ =404;
}
}
EOF
echo "配置文件已创建: $domain"
else
echo "错误: 域名不能为空"
fi
}
# 调用函数
create_nginx_config "example.com" 80
# 同时显示在终端和写入日志文件
tee -a deploy.log << EOF
=== 部署开始 ===
时间: $(date '+%Y-%m-%d %H:%M:%S')
用户: $USER
分支: $(git branch --show-current)
提交: $(git rev-parse --short HEAD)
=== 部署结束 ===
EOF
# 使用循环和 heredoc 批量创建配置文件
for env in dev test prod; do
cat > "config-${env}.yml" << EOF
environment: $env
database:
host: db-${env}.example.com
port: 5432
redis:
host: redis-${env}.example.com
EOF
done
echo 重定向DOCKER_COMPOSE 而不是 EOF)这些技巧能帮你更高效地在 Linux 系统中处理文件内容, 选择最适合场景的方法是关键 ฅ’ω’ฅ
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。