4

I'm attempting to use python to dynamically create bash aliases (like, for example, aliases to log in to a set of servers). I'd love to be able to do something like this:

from subprocess import call
SERVERS = [
    ("example", "user@example.com"),
    #more servers in list
]    

for server in SERVERS:
    call('alias %s="ssh %s"' % (server[0], server[1]), shell=True)

The problem is that subprocess launches the jobs in a separate shell session, so the program runs fine, but does nothing to the shell session I run it from.

The same problem occurs with python's os.system or attempting to print the commands and pipe them to bash (all of these create the aliases, but in a new shell that is promptly destroyed after the program finishes).

Ultimately, the goal of this is to run this script from .bashrc

How does one do this?

Zags
  • 37,389
  • 14
  • 105
  • 140
  • This seems far more complicated than just defining the aliases in `bash` without involving Python. – chepner Feb 11 '14 at 12:45
  • 1
    @chepner Obviously if this were the end-all-be-all, Python would be inappropriate. The point of doing this is not just to generate this particular set of aliases dynamically, but also to be able to generate other aliases (such as uploading files to servers) dynamically as well. – Zags Feb 11 '14 at 23:09

1 Answers1

6

You should write the alias commands to stdout. (eg. just use print).
Then the shell that is calling the Python script can run the alias commands itself.

As commented by @that other guy

eval "$(python yourscript.py)"

in your .bashrc should do it

John La Rooy
  • 295,403
  • 53
  • 369
  • 502