Вам необходимо запретить оценку переменных в этом документе в локальной системе. Вы можете заставить его работать как строка в кавычках, поместив конечный токен в кавычки.
#!/bin/bash
SERVER=127.0.0.1
ssh root@$SERVER << 'EOF'
checkcommand(){
echo "checking $1"
command -v $1 || apt install $1
}
checkcommand git
EOF
Это описано в разделе Руководства Bash по Здесь Документы :
Если какая-либо часть слова заключена в кавычки, разделитель является результатом удаления кавычки для word , а строки в здесь-документе не являютсярасширен. Если слово не заключено в кавычки, все строки документа здесь подвергаются расширению параметров, подстановке команд и арифметическому расширению, последовательность символов \newline
игнорируется, и ‘\’
должен использоваться для цитированиясимволы ‘\’
, ‘$’
и ‘
'`.
word относятся к токену после <<
, а delimiter относитсяк соответствующему токену в конце документа.