Так как компьютер B не может получить доступ к компьютеру A, необходимо будет открыть удаленный туннель от компьютера первое.
ssh user@computerB -R vvv:localhost:22
Проблема в том, что curl
ожидает нормальных терминальных настроек и zle
не ожидает, что вы измените терминальные настройки. Поэтому вы можете написать вместо этого:
_check-gmail() {
zle -I
(
s=$(stty -g) # safe zle's terminal setting
stty sane # sane settings for curl
curl -u username --silent "https://mail.google.com/mail/feed/atom" |
tr -d '\n' | awk -F '<entry>' '{for (i=2; i<=NF; i++) {print $i}}' |
sed -n "s/<title>\(.*\)<\/title.*name>\(.*\)<\/name>.*/\2 - \1/p"
stty $s # restore zle's terminal settings
) < /dev/tty
}
Один из подходов - запросить пользователя перед запуском _check-gmail
, чтобы в вашем скрипте был пароль в переменной. Затем вы передаете переменную пароля в свою функцию, чтобы команда curl
могла ее использовать.
Например:
$ tst_fun () { echo "Parameter #1 is $1"; }
$ tst_fun "my_pass"
Parameter #1 is my_pass
$
Чтобы получить пароль от пользователя вашего скрипта, у вас есть несколько вариантов. Если вам нужен красивый графический интерфейс, вы можете использовать zenity
, чтобы открыть диалоговое окно с запросом пароля.
Например:
my_pass=$(zenity --password)
echo "$my_pass"
Теперь, когда выполняются вышеуказанные команды, результаты, введенные в диалоговом окне, доступны в переменной $ my_pass
. Поэтому, если бы я набрал в диалоговом окне пароль supersecret, я бы получил следующее:
$ my_pass=$(zenity --password)
$ echo $my_pass
supersecret