Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Can I ssh somewhere, run some commands, and then leave myself a prompt?

Tags:

shell

ssh

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?'

like image 317
John Lawrence Aspden Avatar asked Feb 15 '12 21:02

John Lawrence Aspden


People also ask

How do you run a job that will continue running even if you are logged out?

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.


2 Answers

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 
like image 115
William Pursell Avatar answered Sep 18 '22 05:09

William Pursell


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 
like image 21
jcollado Avatar answered Sep 20 '22 05:09

jcollado