我在我的 ubuntu 自动安装中使用以下命令在我的文件late-commands
中添加一行:/etc/aliases
sed -i -e '/^postmaster:.*/i\'$'root: root' /target/etc/aliases
我也尝试了不符合 POSIX 的版本:
sed -i '/^postmaster:.*/i root: root' /target/etc/aliases
安装时结果相同:
finish: subiquity/Late/load_autoinstall_data: {"sed -i -e '/^postmaster:.*/i\\'$'root": "root' /target/etc/aliases"} is not of type 'string', 'array'
我想我理解了这个问题:列空间被 yaml 或其他东西解释为 yaml 条目。至少在我看来,这条消息导致了这个问题。
我认为既然late-commands
已经是多行命令,这不会有什么问题。
我也尝试使用双引号代替单引号。
知道如何实现想要的行为吗?
答案1
我认为由于后期命令已经是多行命令,所以这不会有任何问题。
您为什么会这么想?听起来您好像在使用单行 YAML,并认为它的行为会像多行 YAML 一样。
我能够毫无错误地使用此 YAML 多行语法
#cloud-config
autoinstall:
late-commands:
- |
sed -i '/^postmaster:.*/i root: root' /target/etc/aliases
true
true
我在命令末尾使用,这样如果sed
以非零返回代码退出,则它不会阻止安装程序继续运行。例如,如果/target/etc/aliases
不存在。
也可以看看
笔记
美元符号确实存在一些语法/转义问题。当我尝试此配置时
#cloud-config
autoinstall:
late-commands:
- |
cat <<EOF > /run/aliases
postmaster:root
EOF
sed -i -e '/^postmaster:.*/i\'$'root: root' /run/aliases
sed -i '/^postmaster:.*/i root: root' /run/aliases
true
生成的/run/aliases
文件内容为
$root: root
root: root
postmaster:root
我使用 Ubuntu 22.04 进行了测试(subiquity 22.04.2
)