如果无法破解此漏洞,请提供任何帮助。
我有一个小脚本,它做了一些逻辑,然后试图为我创建别名以加载到我的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启动后。。。
加载别名
就像我说的那样,这是我想要的,但1)它非常丑陋,2)手动。
看起来您想要
eval "$(script.pl)"
如果你想在交互式函数中使用它,你应该放在script.pl
的完整路径中,这样无论你在哪个目录中,它都能工作;或者,当然,在你的PATH
中有script.pl
。
如果你想把它放在.profile
的一个函数中,你需要确保输出不会产生任何Bashmism,因为.profile
与其他shell共享。也许可以将其放在.bash_profile
中(但请注意,如果您创建了一个新的.bash_profile
,这将在启动Bash时禁用读取.profile
,因此您将希望在.bash_profile
中显式执行此操作)。
例如,source
和function
是(相当多余的IMHO)Bash扩展,它们在常规sh
中不是有效的命令。
当然,关于eval
的常见警告也适用,但这并不比你已经在做的更不安全。
为什么不将load_aliases
命令放入.bashrc
中?
除了eval
解决方案,您还可以使用进程替换将script.pl
的输出视为一个文件。
source <(script.pl)
这应该是可行的,尽管我无法摆脱一种挥之不去的怀疑,即我曾在source
中遇到过一个问题,希望有一个真正的文件,而不是本质上的管道。