动态加载别名到当前shell

时间:2016-04-15 04:36:31

标签: bash shell alias

Haven已经能够解决这个问题,任何帮助都会得到解决。

我有一个小脚本执行某些逻辑,然后尝试为我创建别名以加载到我的shell中。我已经尝试了几种不同的方法,但是还没有比这更好的方法。这感觉就像一个讨厌的黑客。

 script.pl > new_aliases.txt && source new_aliases.txt && rm new_aliases.txt

理想情况下,这发生在.bashrc文件中,因此在shell启动时会加载它。我能做的最好的事情是将上面的行包装在shell函数中,然后在shell启动后手动调用它。

在我的.profile

function load_aliases () {
    script.pl > new_aliases.txt && source new_aliases.txt && rm new_aliases.txt
}

然后在shell启动后......

  

load_aliases

就像我说这样做我想要的,但1)它该死的丑陋和2)手册。

3 个答案:

答案 0 :(得分:3)

看起来像你想要的

eval "$(script.pl)"

如果你想在交互式功能中使用它,你应该放入script.pl的完整路径,这样无论你在哪个目录,它都能正常工作;或者,当然,script.pl中有PATH

如果你想将它放在.profile的函数中,你需要确保输出不会产生任何Bashisms,因为.profile与其他shell共享。也许把它放在.bash_profile中(但请注意,你创建了一个新的.bash_profile,这会在你启动Bash时禁用阅读.profile,所以你会希望从你的{{{ 1}}然后)。

例如,.bash_profilesource是(相当多余的恕我直言)Bash扩展,它们不是常规function中的有效命令。

关于sh的常见警告当然适用,但这并不比你现在做的更不安全。

答案 1 :(得分:0)

为什么不将extern命令放入load_aliases

答案 2 :(得分:0)

eval解决方案外,您还可以使用流程替换将script.pl的输出视为文件。

source <(script.pl)

这应该有用,虽然我不能动摇唠叨的怀疑,因为我source期待一个真正的文件,而不是本质上是一个管道,我遇到了一个问题。