2013-11-21 2 views
0

Как определить псевдонимы перед тем, как определить одноименную функцию в файле сценария bash (этот файл будет получен в другом скрипте)?конфликт функции bash с псевдонимом

Что-то вроде мета-программирования в Баш (определить другую функцию имя, если это имя уже занято псевдонимами?)

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

$ 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 "[email protected]"; }' 
$ type alert 
alert is aliased to `notify-send --urgency=low -i error' 

$ cat t.sh 
alert() { echo "[email protected]"; } 

ответ

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

Команда alias существует с ненулевым статусом, если его единственный аргумент не является псевдонимом.

+0

'unalias alert' будет удалять псевдоним, поэтому я могу использовать функцию с тем же именем (а не с псевдонимом). – schemacs

2

Вам не нужно. Псевдонимы по умолчанию не расширяются в неинтерактивных оболочках.

+0

Но что делать, если оно используется в интерактивной оболочке? – schemacs

+0

Это другой вопрос. –

0

Ну, which <name> возвращает 0, если name - это псевдоним.

Так, чтобы проверить, если 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 

Примечание: Это не будет проверять, если есть функция Баш называется custom_name в текущей оболочке.

+0

'человек, который ничего не говорит об алиасе. 'which' return 1, когда существует псевдоним. – schemacs

+0

Я не уверен, какую версию вы используете и на каком дистрибутиве, но 'which untar' возвращает' 0' для меня, и у меня есть 'alias untar = 'tar -xvf'' в моем bashrc – ffledgling

+0

' which - -версия' ничего не дает. Это '' 'происходит от debianutils 4.4. – schemacs

Смежные вопросы