3

Используя профили, вы можете отправлять текст в оболочку в начале сеанса в разделе "Отправить текст в начале". Я хотел бы сделать это 3 раза подряд, но, похоже, разрешена только одна строка. Кто-нибудь знает какой-либо другой способ сделать это с помощью iterm2? Я полагаю, что могу использовать яблочный скрипт, но я бы предпочел начать сеанс, используя iterm2 напрямую.

Пример:

<terminal session starts>
ssh server
send "asdf"
send "qwer"
send "zxcv"
(done...)

Причина, по которой я не могу просто установить профиль для этого, заключается в том, что в моей работе есть специальная среда, которая обычно задает 3 вопроса. Я хочу автоматизировать ответы на эти 3 вопроса и установить их в конфигурации профиля iterm2 в разделе "Отправить текст при запуске".

2 ответа2

3

Существует инструмент под названием Expect который выполняет обобщенное рукопожатие и обмен информацией, который вы можете использовать, однако iTerm2 может делать то, что Expect делает прямо со вкладки Advanced.

Примечание: Expect написан на TcL, удивительном языке, который нужно знать самостоятельно. Этот конкретный вопрос, вероятно, прописан с хорошо прокомментированным ответом где-нибудь в Expect FAQ. Кроме того, если вы решили реализовать решение с Expect поверх iTerm2, вы можете использовать это решение не только на своем хосте OSX. Так что подумайте об этой сделке заранее. В краткосрочной перспективе вариант iTerm2 Triggers поможет вам.

Итак, чтобы получить часть того, что Expect предоставляет прямо из iTerm2, перейдите на вкладку Advanced. Там вы найдете возможность триггеров. Оттуда вы можете добавить "+" конкретное правило триггера. В двух словах, эти триггеры (и Expect) позволяют вам выполнять фильтрацию всего текста в Терминал и из него, сопоставлять этот текст с заданным пользователем триггером регулярных выражений (ReEx), а также когда это ReEx сопоставляется в текстовом потоке терминала. iTerm2 выполнит заданную пользователем задачу.

Вот одно правило триггера, которое будет соответствовать строке, содержащей ровно одно слово, Пароль, а затем Отправить текст: Мой пароль.

Имейте в виду, что поток «Терминальный текст» содержит невидимые символы, и задание точного соответствия ReEx может быть проблемой, особенно, например, потому что разные серверы реализуют разные разделители строк, и если ReEx специально использует один, он не может соответствовать для нет явной причины.

Одно: я думаю о том, почему вы можете задавать этот вопрос? Не уверен, что вы знакомы с, но если вы хотите автоматически войти через ssh , добавьте комментарий, и его настройка - это просто. Если вы заинтересованы в этом, выполните поиск по ключевым словам «ssh-keygen» и "сгенерируйте открытые ключи rsa для ssh".

Я знаю, что это комментарий, но я решил добавить это, поскольку у меня уже есть место - для чего оно стоит:

Я думаю, что можно использовать Send text at start: для установки переменных среды, которые имеют отношение к сеансу удаленного хоста. Например, я использовал этот метод для передачи параметров в мои удаленные процессы в качестве средства передачи параметров через переменные среды. Я не уверен, но это было бы использование этого поля Command для настройки того, что происходит, когда запускается определенный ssh userid@hostname .

См. Второй ответ в:Возможно ли заставить SSH пересылать пустые аргументы? для полного примера, но все сводится к следующему синтаксису:

$ ssh me@localhost 'VAR1="var1 text" /tmp/try.pl'

Я предполагаю, что одним из возможных вариантов использования опции « Send text at start: является предоставление VAR1="var1 text" /tmp/try.pl или, просто, VAR="var1 text" в среду удаленного процесса.

Вот более конкретный пример с нуля, использующий хост Mac Dual-G5 с именем r2d2:

Вот как я настроил профиль r2d2:

Теперь, когда я нажимаю на r2d2 iTerm2 и выводю echo $FRED , я вижу, что любая команда, которую я бы вызвал, а именно ssh, может исследовать среду и определить контекст для выполнения:

Конечно, это предположение, учитывая то, что я испытал, так что это всего лишь одна возможность. Теперь я знаю, что смогу использовать этот путь управления, так что спасибо за вопрос.

0

Вы также можете иметь скрипт вроде ~/test.py

#!/usr/local/bin/python3

print("echo hello world")

А затем выполните этот сценарий как совместный процесс в меню Ser-> Run Co-Process в iTerm2, указав сценарий как ~/test.py

Я считаю необходимым сделать ваш скрипт исполняемым (хотя я не пробовал иначе), chmod +x ~/test.py

Удачного кодирования!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .