【问题标题】:Use python to dynamically create bash aliases使用python动态创建bash别名
【发布时间】:2014-02-11 00:37:07
【问题描述】:

我正在尝试使用 python 来动态创建 bash 别名(例如,用于登录一组服务器的别名)。我希望能够做这样的事情:

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)

问题是子进程在单独的 shell 会话中启动作业,因此程序运行良好,但对我运行它的 shell 会话没有任何作用。

python 的os.system 或尝试打印命令并将它们通过管道传输到 bash 时也会出现同样的问题(所有这些都会创建别名,但在程序完成后会立即销毁的新 shell 中)。

最终,这样做的目的是从 .bashrc 运行这个脚本

如何做到这一点?

【问题讨论】:

  • 这似乎比在不涉及 Python 的情况下在 bash 中定义别名要复杂得多。
  • @chepner 显然,如果这是最终的结果,那么 Python 将是不合适的。这样做的意义不仅在于动态生成这组特定的别名,而且还能够动态生成其他别名(例如将文件上传到服务器)。

标签: python bash dynamic alias


【解决方案1】:

您应该将别名命令写入标准输出。 (例如,只使用打印)。
然后调用 Python 脚本的 shell 可以自己运行别名命令。

正如@that other guy 评论的那样

eval "$(python yourscript.py)"

在你的.bashrc 中应该这样做

【讨论】:

  • 我希望自动创建别名。理想情况下,我从 bashrc 调用这个脚本
  • @Zags 使用 gnibbler 的建议并将其作为 eval "$(python yourscript.py)" 在您的 .bashrc 中调用。
  • @thatotherguy 将其发布为答案
猜你喜欢
  • 1970-01-01
  • 2012-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-13
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
相关资源
最近更新 更多