С первым нет tty
для ssh
, т.к. stdin
не подключен к терминалу, а вот этот файл. На самом деле, если я попытаюсь выполнить аналогичную команду (в Debian), то получу следующую ошибку:
Pseudo Terminal не будет выделен, так как stdin не является терминалом.
Чтобы заставить его работать, вы можете сделать что-то вроде:
ssh -tt 192.168.1.100 <<EOF
sudo -S id
password
EOF
Хотя это не очень хорошая идея, так как пароль будет простым текстом.
Я наткнулся на простое решение, которое позволяет избежать кодирования пароля открытым текстом, вы можете использовать графическую программу для ввода пароля:
ssh -X 192.168.1.100 <<EOF
SUDO_ASKPASS=/usr/lib/ssh/x11-ssh-askpass sudo -A id
EOF
Конечно, программа ssh-askpass
должна быть установлена в данном месте, и вы должны запустить сеанс X на машине, над которой вы работаете. Есть несколько вариантов программы ssh-askpass
, которые также должны работать (версии Gnome/KDE). Также должна работать графическая программа замены sudo
типа gksu
или kdesudo
.
Если xbiz
или xbder
пуст, bc будет жаловаться (здесь bash)
$ echo "5.2 + " | bc -l
(standard_in) 2: syntax error
Вам понадобится что-то вроде (непроверено)
if (! $?xbiz) set xbiz = 0
set varx = `echo " 5.2 + $xbiz" | bc -l`
if (! $?xbder) set xbder = 0
set vary = `echo " 5.2 + $xbder" | bc -l`