将别名动态加载到当前 shell
Dynamically loading aliases into current shell
没能破解这个,欢迎大家帮忙。
我有一个小脚本,它执行一些逻辑,然后尝试为我创建别名以加载到我的 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) 手动。
看起来你想要
eval "$(script.pl)"
如果你想在交互功能中使用它,你应该输入 script.pl
的完整路径,这样无论你在哪个目录中它都可以工作;或者,当然,在您的 PATH
.
中添加 script.pl
如果您想将其放入 .profile
的函数中,您需要确保输出不会产生任何 Bash 主义,因为 .profile
与其他贝壳。也许把它放在 .bash_profile
中(但请注意,如果你创建一个新的 .bash_profile
,这会在你开始 Bash 时禁用读取 .profile
,所以你会想要明确地这样做然后从你的.bash_profile
)。
例如,source
和 function
是(相当多余的恕我直言)Bash 扩展,它们在常规 sh
.
中不是有效命令
当然,关于 eval
的常见警告适用,但这并不比您已经在做的更不安全。
你为什么不把 load_aliases
命令放到你的 .bashrc
中?
除了eval
的解决方案,还可以使用进程替换,把script.pl
的输出当成一个文件。
source <(script.pl)
这应该可行,尽管我无法摆脱挥之不去的怀疑,即我 运行 遇到过一次问题 source
期待一个真实的文件,而不是本质上是管道的文件。
没能破解这个,欢迎大家帮忙。
我有一个小脚本,它执行一些逻辑,然后尝试为我创建别名以加载到我的 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) 手动。
看起来你想要
eval "$(script.pl)"
如果你想在交互功能中使用它,你应该输入 script.pl
的完整路径,这样无论你在哪个目录中它都可以工作;或者,当然,在您的 PATH
.
script.pl
如果您想将其放入 .profile
的函数中,您需要确保输出不会产生任何 Bash 主义,因为 .profile
与其他贝壳。也许把它放在 .bash_profile
中(但请注意,如果你创建一个新的 .bash_profile
,这会在你开始 Bash 时禁用读取 .profile
,所以你会想要明确地这样做然后从你的.bash_profile
)。
例如,source
和 function
是(相当多余的恕我直言)Bash 扩展,它们在常规 sh
.
当然,关于 eval
的常见警告适用,但这并不比您已经在做的更不安全。
你为什么不把 load_aliases
命令放到你的 .bashrc
中?
除了eval
的解决方案,还可以使用进程替换,把script.pl
的输出当成一个文件。
source <(script.pl)
这应该可行,尽管我无法摆脱挥之不去的怀疑,即我 运行 遇到过一次问题 source
期待一个真实的文件,而不是本质上是管道的文件。