bash函数与别名冲突

时间:2013-11-21 06:59:54

标签: linux bash sh

如何在bash脚本文件中定义相同名称功能之前检测别名(此文件将在另一个脚本中获取)?

像bash中的元编程一样(如果别名已经使用别名,则定义另一个名称函数?)

$ source t.sh
$ alert 'test'
test
$ type alert
alert is a function
alert () 
{ 
    echo -n "$@"
}

$ alias alert='notify-send --urgency=low -i error'
$ source t.sh
bash: t.sh: line 1: syntax error near unexpected token `('
bash: t.sh: line 1: `alert() { echo "$@"; }'
$ type alert
alert is aliased to `notify-send --urgency=low -i error'

$ cat t.sh
alert() { echo "$@"; }

3 个答案:

答案 0 :(得分:2)

你不需要。默认情况下,别名不会在非交互式shell中展开。

答案 1 :(得分:0)

if alias alert 2> /dev/null; then
    echo "'alert' already an alias"
else
    source t.sh
fi

如果alias命令的单个参数不是别名,则{{1}}命令以非零状态存在。

答案 2 :(得分:0)

如果which <name>是别名,name会返回0。

因此,要检查是否已使用custom_name,您可以执行以下操作:

if [ $(which custom_name >/dev/null; echo $?) -eq 0 ]
then
    echo "Already aliased"
    return 1
else
    echo "Free to use"
    return 0
fi

注意:这不会检查当前shell中是否存在名为custom_name的bash函数。