I find myself needing to log into various servers, set environment variables, and then work interactively.
e.g.
$ ssh anvil
jla@anvil$ export V=hello
jla@anvil$ export W=world
jla@anvil$ echo $V $W
hello world
How can I combine the first few commands, and then leave myself at a prompt?
Something like:
$ ssh anvil --on-login 'export V=hello; export W=world;'
jla@anvil$ echo $V $W
hello world
Obviously this is a model problem. What I am really asking is 'how do I ssh to a different machine, run some commands, and then continue as if I'd run them by hand?'
Probably the simplest thing is:
If you want to set variables, do:
Note that this is a terrible hack, and you would be much better off putting your desired initial commands in a script and doing:
Turns out this is answered by this question:
How can I ssh directly to a particular directory?
to ssh:
followed by:
You could also use the following expect script:
It is worth to note that
ssh -t
can actually be used to connect to one host via another host.So for example if you want to execute a command on anvil, but anvil is only accessible from host gateway (by firewall etc.), you can do like this:
Exiting the anvil, will also log you out of gateway (if you want to stay on gatway after leaving anvil than just add another
bash -l
before closing the command.Another approach is to execute this beast (also gives me a colored shell):
ssh host -t "echo 'rm /tmp/initfile; source ~/.bashrc; cd foo/; git status' > /tmp/initfile; bash --init-file /tmp/initfile"