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)手册。
答案 0 :(得分:3)
看起来像你想要的
eval "$(script.pl)"
如果你想在交互式功能中使用它,你应该放入script.pl
的完整路径,这样无论你在哪个目录,它都能正常工作;或者,当然,script.pl
中有PATH
。
如果你想将它放在.profile
的函数中,你需要确保输出不会产生任何Bashisms,因为.profile
与其他shell共享。也许把它放在.bash_profile
中(但请注意,你创建了一个新的.bash_profile
,这会在你启动Bash时禁用阅读.profile
,所以你会希望从你的{{{ 1}}然后)。
例如,.bash_profile
和source
是(相当多余的恕我直言)Bash扩展,它们不是常规function
中的有效命令。
关于sh
的常见警告当然适用,但这并不比你现在做的更不安全。
答案 1 :(得分:0)
为什么不将extern
命令放入load_aliases
?
答案 2 :(得分:0)
除eval
解决方案外,您还可以使用流程替换将script.pl
的输出视为文件。
source <(script.pl)
这应该有用,虽然我不能动摇唠叨的怀疑,因为我source
期待一个真正的文件,而不是本质上是一个管道,我遇到了一个问题。