Другой метод :печатать все, кроме последней строки файла, печатать новый текст, а затем печатать последнюю строку файла. Затем перенаправьте весь этот вывод в новый файл.
{
sed '$d' limits.conf
cat <<EOF
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
root soft nproc 65535
root hard nproc 65535
root soft nofile 65535
root hard nofile 65535
EOF
tail -1 limits.conf
} > tmpfile && mv tmpfile limits.conf
$ echo "$pw"
$!@`',
$ echo "${pw@Q}"
'$!@`'\'','
Это должно сработать. Однако я не знаю, в какой версии bash
это было введено. Это тоже работает и, возможно, было доступно ранее :
$ printf %q "$pw"
\$\!@\`\'\,
# or, avoiding the command substitution
$ printf -v pw_ql1 %q "$pw"
$ echo "$pw_ql1"
Несколько возможных решений.
Пусть pihole будет запрашивать пароль напрямую, а не с помощью собственной подсказки.
ssh -t user@host pihole -a -p
Запустите собственную подсказку read
на целевой стороне:
ssh -t user@host 'read -rsp "Password: " newpass && pihole -a -p "$newpass"'
Пропустить через трубу:
echo "$newpass" | ssh user@host 'read -r newpass && pihole -a -p "$newpass"'
Укажите пароль, который вы прочитали, прежде чем передать его:
read -rsp "Password: " newpass
qnewpass=$(printf "%q" "$newpass")
ssh user@host pihole -a -p "$qnewpass"
Закодируйте пароль и расшифруйте его на другой стороне:
newpass_base64=$(printf "%s" "$newpass" | base64)
ssh user@host "pihole -a -p \$(echo $newpass_base64 | base64 -d)"
Вообще не используйте специальные символы, стиль XKCD . ;-)