采取以下脚本:
shopt -s expand_aliases
set -f
result=$(compgen -A function)
echo $result
运行时输出我的所有自定义bash函数:
mp3gain pkg-pkgbuild-download quote quote_readline restart standby turnoff turnoff-timer youtubeConvert
但是,稍微更改脚本以输出别名时,输出为空:
shopt -s expand_aliases
set -f
result=$(compgen -A alias)
echo $result
如果直接运行compgen -A alias
,它就不是空的。
我的别名存储在~/.bash_aliases
中,我的功能存储在/.bash_functions
中。两者都是~/.bashrc
中的来源:
# Functions
if [ -f ~/.bash_functions ]; then
. ~/.bash_functions
fi
# Aliases
if [ -f ~/.bash_aliases ]; then
. ~/.bash_aliases
fi
我在这里缺少什么?
答案 0 :(得分:1)
我愿意下注别名来源。这可以通过这个简单的脚本验证:
#!/bin/bash
alias
如果没有输出,则不会获取别名。因此,这就是为什么compgen在放入脚本(非源别名)时返回一个空列表,但在带有源别名的shell中手动运行时工作正常。
解决方案:将“source~ / .bash_aliases”放在脚本顶部附近,以确保在运行之前调用它们。