Могу ли я где-нибудь ssh, запустить несколько команд, а затем оставить себе подсказку?

Мне нужно войти на различные серверы, установить переменные среды, а затем работать в интерактивном режиме.

например.

$ ssh anvil
jla@anvil$ export V=hello
jla@anvil$ export W=world
jla@anvil$ echo $V $W
hello world

Как я могу объединить несколько первых команд, а затем оставить себя в командной строке?

Что-то вроде:

$ ssh anvil --on-login 'export V=hello; export W=world;'
jla@anvil$ echo $V $W
hello world

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

32
задан John Lawrence Aspden 15 February 2012 в 21:44
поделиться

4 ответа

Наверное, самая простая вещь:

$ ssh -t host 'cmd1; cmd2; sh -i'

Если вы хотите установить переменные, выполните:

$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i'

Обратите внимание, что это ужасный хак, и вы были бы намного лучше Выключить желаемые начальные команды в скрипте и выполнить:

$ scp setup host:~
$ ssh host
host$ . setup
30
ответ дан 27 November 2019 в 20:47
поделиться

Другой подход заключается в том, чтобы казнить этого зверя (также дает мне цветную раковину):

ssh host -t "echo 'rm /tmp/initfile; source ~/.bashrc; cd foo/; git status' > /tmp/initfile; bash --init-file /tmp/initfile"

0
ответ дан 27 November 2019 в 20:47
поделиться

Оказывается, на этот вопрос отвечает этот вопрос:

Как я могу ssh напрямую перейти в определенный каталог?

to ssh:

ssh -t anvil "export V=hello; export W=world; bash"

а затем:

jla@anvil$ echo $V $W
hello world
4
ответ дан 27 November 2019 в 20:47
поделиться

Вы также можете использовать следующий сценарий ожидаемого :

#!/usr/bin/expect -f
spawn ssh $argv
send "export V=hello\n"
send "export W=world\n"
send "echo \$V \$W\n"
interact
14
ответ дан 27 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: