我想知道为什么这个代码不起作用,它很简单,但由于某种原因它不起作用。
WIREGUARD_TEMP_NEW_CLIENT_INFO="# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start
[Peer]
PublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=
PresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=
AllowedIPs = 10.0.0.4/32,fd00:00:00::4/128
# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end"
sed -i "$((6 * 4 - 6 + 11))i${WIREGUARD_TEMP_NEW_CLIENT_INFO}" /etc/wireguard/wg0.conf
我得到的错误是
sed: -e expression #1, char 113: unknown command: `['
代码在做什么?
它只是转到给定的行号并将内容添加到给定的实时号码。
答案1
的第二个参数sed
扩展"$((6 * 4 - 6 + 11))i${WIREGUARD_TEMP_NEW_CLIENT_INFO}"
为多行字符串:
29i# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start
[Peer]
PublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=
PresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=
AllowedIPs = 10.0.0.4/32,fd00:00:00::4/128
# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end
该sed
命令i
会在同一行上插入后面的字符串。下一行被解释为新命令sed
。由于[Peer]
不是有效sed
命令,它会发出您看到的错误消息。
答案2
如果有人遇到同样的问题,就需要使用这个代码。
#!/bin/bash
TEMP_VALUE="# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d start\n[Peer]\nPublicKey = L5SCXFRI4Mhyo1nKTjs5d64CSGd36ehC8MD8jg2FbEM=\nPresharedKey = 3sejb0srnD3ZHy4I3rydIqy6CPXEHwXWeoX2Yu/2msU=\nAllowedIPs = 10.0.0.4/32,fd00:00:00::4/128\n# ef37a62148810e97daa4deb88fa7f8add6532c39d2feb56d712a0ab1e8f5fd13ec52cfb1751ad3812e21f33a1e0508f14b7d end"
sed -i $((1 + 1))i"${TEMP_VALUE}" file