Вам необходимо заключить операторы перенаправления вывода в кавычки, иначе они будут обрабатываться вашей локальной оболочкой, а не передаваться в качестве параметров функции.
ssh1 echo 'net.ipv4.ip_nonlocal_bind=1' '>>' /etc/sysctl.conf
ssh2 echo 'net.ipv4.ip_nonlocal_bind=1' '>>' /etc/sysctl.conf
Вам также необходимо использовать eval
в функции x()
, потому что операторы перенаправления не обрабатываются после раскрытия переменных. И вам нужно экранировать $
в переменных, которые должны быть развернуты в удаленной системе.
function ssh1() {
printf -v var "%s" "$*"
ssh root@$s <<END
x() {
eval "\$1"
}
x "$var"
END
}
Я не уверен, в чем смысл этого printf
, вы можете просто сделать var="$*"
, чтобы получить тот же результат. Вам даже не нужна переменная var
, просто используйте x "$*"
На самом деле, я думаю, я бы написал это как:
function ssh1() {
ssh root@$s <<END
$*
END
}