You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用tee命令向文件追加内容时如何避免内部命令被自动执行

问题原因

你使用的是默认的无引号Here Document语法<< EOF,此时Shell会自动解析块内的命令替换$()、变量引用$xxx、反引号命令等内容,直接执行后把结果替换到对应位置,所以才会出现$(/usr/bin/id -u)被替换成当前用户UID的情况。

解决方法

方案1(推荐,整段原样保存)

给结束标识符EOF包裹单引号,就能禁用整个Here Document块内的所有特殊解析,完全按输入的原文写入文件,正确写法如下:

tee -a test.sh << 'EOF'
if [[ $(/usr/bin/id -u) -ne 0 ]]; then
    echo You are not running as the root user.
    exit 1;
fi;
EOF

单引号包裹在EOF两侧即可,和<<之间可以留空格也可以不留,效果一致。

方案2(局部禁用替换)

如果你只需要部分内容不被解析,其余内容还是要做变量/命令替换的话,可以给需要原样保留的$符号前加转义符\,写法如下:

tee -a test.sh << EOF
# 这里的$HOME会被解析替换成当前用户家目录
echo 当前用户家目录是$HOME
# 这里加了转义符的\$不会被解析,原样保留
if [[ \$(/usr/bin/id -u) -ne 0 ]]; then
    echo You are not running as the root user.
    exit 1;
fi;
EOF

内容的提问来源于stack exchange,提问作者Alex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 09:15:04