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

如何在Ubuntu中通过命令行自动创建指定内容的script.sh脚本

自动化创建目标script.sh的正确方法

推荐方案:Here Document(最简洁可靠)

这种方式无需复杂转义,能完整保留原代码的所有符号、变量和引号结构:

sudo bash << 'EOF' > /etc/temp/script.sh
#!/bin/bash
paths=($(ls -l /home/*/.bashrc | awk "{print \$NF}")); echo "${paths[@]}"

for path in "${paths[@]}"
do
    sudo sh -c "echo 'if [ -z \"\$HISTTIMEFORMAT\" ]
    then export HISTTIMEFORMAT=\"%F %T \"
    fi' >> \"$path\""
done
EOF
  • 说明:<< 'EOF' 表示后续直到EOF的内容会原样写入文件,不会被当前Shell解析变量或引号,完美匹配需求。
  • 注意:如果/etc/temp目录不存在,先执行sudo mkdir -p /etc/temp创建,或者替换为系统默认临时目录/tmp。

原命令失败原因

你之前的命令存在两个核心问题:

  1. 嵌套多层单/双引号时,转义逻辑混乱,导致部分引号提前闭合,代码结构被破坏;
  2. 单引号内的$(ls -l ...)会被当前Shell提前执行,而不是作为字符串写入文件,最终生成的脚本内容不符合预期。

备选方案:使用printf转义

如果偏好单行命令方式,可通过逐层转义引号和变量实现:

sudo printf '%s\n' '#!/bin/bash' 'paths=($(ls -l /home/*/.bashrc | awk "{print \$NF}")); echo "${paths[@]}"' '' 'for path in "${paths[@]}"' 'do' '    sudo sh -c "echo '\''if [ -z \"\$HISTTIMEFORMAT\" ]' '' '    then export HISTTIMEFORMAT=\"%F %T \"' '' '    fi'\'' >> \"\$path\""' 'done' > /etc/temp/script.sh

不过这种方式转义复杂,容易出错,优先推荐Here Document方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:30:12