Мне нужно войти на различные серверы, установить переменные среды, а затем работать в интерактивном режиме.
например.
$ 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 к другому компьютеру, запустить несколько команд, а затем продолжить, как если бы я запустил их вручную?»
Наверное, самая простая вещь:
$ ssh -t host 'cmd1; cmd2; sh -i'
Если вы хотите установить переменные, выполните:
$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i'
Обратите внимание, что это ужасный хак, и вы были бы намного лучше Выключить желаемые начальные команды в скрипте и выполнить:
$ scp setup host:~ $ ssh host host$ . setup
Другой подход заключается в том, чтобы казнить этого зверя (также дает мне цветную раковину):
ssh host -t "echo 'rm /tmp/initfile; source ~/.bashrc; cd foo/; git status' > /tmp/initfile; bash --init-file /tmp/initfile"
Оказывается, на этот вопрос отвечает этот вопрос:
Как я могу ssh напрямую перейти в определенный каталог?
to ssh:
ssh -t anvil "export V=hello; export W=world; bash"
а затем:
jla@anvil$ echo $V $W
hello world
Вы также можете использовать следующий сценарий ожидаемого :
#!/usr/bin/expect -f
spawn ssh $argv
send "export V=hello\n"
send "export W=world\n"
send "echo \$V \$W\n"
interact