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?'
If you want to "background" already running tasks, then Ctrl + Z then run bg to put your most recent suspended task to background, allowing it to continue running. disown will keep the process running after you log out.
Probably the simplest thing is:
$ ssh -t host 'cmd1; cmd2; sh -i'
If you want to set variables, do:
$ ssh -t host 'cmd1; cmd2; FOO=hello sh -i'
Note that this is a terrible hack, and you would be much better off putting your desired initial commands in a script and doing:
$ scp setup host:~ $ ssh host host$ . setup
You could also use the following expect script:
#!/usr/bin/expect -f spawn ssh $argv send "export V=hello\n" send "export W=world\n" send "echo \$V \$W\n" interact
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With