pythonbashdynamicalias

Use python to dynamically create bash aliases


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?


Solution

  • 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 @thatotherguy

    eval "$(python yourscript.py)"
    

    in your .bashrc should do it