Как я могу проверить в моем bashrc, если псевдоним уже установлен

Как я могу проверить свой .bashrc, если псевдоним уже установлен.

Когда я получаю файл .bashrc, у которого есть имя функции, скажем, fun, а моя текущая среда также имеет псевдоним fun.

Я попробовал unalias fun, но это выдаст мне ошибку, что fun не найдено, когда в моей среде уже не будет этого псевдонима.

Итак, в моем .bashrc, в моей забавной функции я хочу проверить, был ли установлен псевдоним, а затем unalias это.


person Kumar Alok    schedule 20.03.2012    source источник


Ответы (8)


Если вы просто хотите убедиться, что псевдоним не существует, просто удалите его и перенаправьте его ошибку на /dev/null следующим образом:

unalias foo 2>/dev/null

Вы можете проверить, установлен ли псевдоним, примерно так:

alias foo >/dev/null 2>&1 && echo "foo is set as an alias" || echo "foo is not an alias"

Как указано на странице руководства:

For each name in the argument list for which no  value  is  sup-
plied,  the  name  and  value  of  the  alias is printed.  Alias
returns true unless a name is given for which no alias has  been
defined.
person mitchnull    schedule 20.03.2012
comment
@BrianHorakh Я думаю, вы имели в виду это для ответа ниже :) мой не использует grep - person mitchnull; 05.05.2021

Просто используйте команду alias как

alias | grep my_previous_alias

Обратите внимание, что вы можете использовать unalias, поэтому вы можете сделать что-то вроде

[ `alias | grep my_previous_alias | wc -l` != 0 ] && unalias my_previous_alias

Это удалит псевдоним, если он был установлен.

person Pablo Fernandez heelhook    schedule 20.03.2012
comment
Я использовал это для проверки la между моими машинами Mac и Linux. В моем .bash_profile на Mac у меня есть alias la='ls -GA (потому что G — это цвет), а затем в моем .bashrc у меня есть function checkLa(){ if [ "$(alias | grep la)" == "ls -GA" ]; then echo "mac user!"; return 0; fi echo "linux user!"; alias la='ls -A --color=auto' }; checkLa(). Я знал, что псевдоним также возвращает все псевдонимы, но я просто не подумал об этом! :D - person dylnmc; 24.09.2014
comment
У вас есть возможная ошибка, пока вы не подтянете grep, т.е.: alias -p | grep foo= с помощью = вы снижаете риск частичного совпадения, в моем случае псевдоним очень короткий (два символа) и поэтому срабатывает неправильно, потому что он совпадает с другими. – - person Brian Horakh; 10.05.2021

Вы можете использовать type, чтобы узнать, существует ли команда, является ли она псевдонимом или нет.

Он вернет статус ошибки, если команда не найдена.

Например, я определяю следующий псевдоним:

$ alias foo="printf"

Затем проверьте следующие сценарии:

$ type foo >/dev/null && echo Command found. || echo Command not found.
Command found.

или специально для псевдонима:

$ alias foo && echo Alias exists || echo Alias does not exist.

или проверить, является ли это псевдонимом или обычной командой:

$ grep alias <(type foo) && echo It is alias. || echo It is not.

Чтобы проверить, определен ли псевдоним в ваших файлах rc, его необходимо проверить вручную, например. к:

[ "$(grep '^alias foo=' ~/.bash* ~/.profile /etc/bash* /etc/profile)" ] && echo Exists. || echo Not there.
person kenorb    schedule 28.09.2015

Хорошим решением для проверки псевдонимов, специфичным для bash, является использование массива BASH_ALIASES, например:

$ echo ${BASH_ALIASES[ls]}
person noonex    schedule 26.01.2017
comment
[[ ${BASH_ALIASES[foo]} ]] && unalias foo поможет, верно? - person codeforester; 28.04.2020
comment
Это кажется самым чистым способом без задействования внешних команд. - person codeforester; 28.04.2020

Вы можете использовать следующее, чтобы упростить файл bashrc:

  1. Убедитесь, что псевдоним существует.
  2. Unalias это.
  3. Определите функцию

alias fun=''
unalias fun
fun ()
{
   # Define the body of fun()
}
person R Sahu    schedule 02.11.2017

Из здесь:

if alias <your_alias_name> 2>/dev/null; then 
  do_something
else 
  do_another_thing; 
fi
person Tom Hale    schedule 19.08.2018

Написал эту функцию на основе ответа noonex:

unalias_if() {
    local alias_name
    for alias_name; do
        [[ ${BASH_ALIASES[$alias_name]} ]] && unalias "$alias_name"
    done
}

и его можно безопасно вызывать как

unalias_if alias1 alias2 ...
person codeforester    schedule 28.04.2020

person    schedule
comment
Это хорошее техническое решение - person WestCoastProjects; 24.06.2021