Как найти декларацию псевдонима?

37

Я пытаюсь найти, где конкретное aliasбыло объявлено. Я искал все обычные места, которые я знаю, чтобы искать псевдонимы:

  • ~ / .Bashrc
  • ~ / .Bash_profile
  • / И т.д. / Bashrc
  • / И т.д. / профиль

Без удачи.

Я знаю, что aliasпотому что, когда я делаю which COMMAND, я получаю:

alias COMMAND='/path/to/command'
    /path/to/command

Есть ли способ узнать, какой файл объявляет aliasтолько зная aliasимя?

utopiabound
источник
3
Связанный с ним вопрос о переменных окружения , а не псевдонимами. В принципе, простого пути не существует, поскольку псевдоним можно было установить где угодно. Попробуйте поместить set -xкак предложено наверху Вашего и посмотрите, сужает ли это это для Вас.
jw013
1
Вы должны поставить set -xв верхней части /etc/bash_profileили /etc/bashrc. Почему бы просто не бежать bash -i -xили bash -l -x?
Микель

Ответы:

30

Я бы посмотрел /etc/profile.d/на обидчика alias.

Вы также можете сделать следующее, чтобы найти его:

grep -r '^alias COMMAND' /etc

Это рекурсивно grepпросматривает файлы в поисках строки, начинающейся с alias COMMAND.

Если ничего не помогает, поставьте это в конце ~/.bashrc

unalias COMMAND
utopiabound
источник
26

Есть несколько вещей, которые вы можете попробовать:

  1. используйте, bash -vчтобы увидеть, какие строки читаются во время запуска оболочки
  2. используйте, bash -xчтобы увидеть, какие команды выполняются во время запуска оболочки
  3. работать только с одним файлом запуска

Баш-В

-v Опция позволяет bashпечатать каждую строку из каждого файла сценария он читает , как он читает.

Начните с запуска

bash -i -v >bash-i.out 2>&1

подождите 5-10 секунд, затем нажмите Ctrl+C.

Это даст вам один файл с именем, bash-i.outкоторый похож на все ваши файлы запуска, объединенные (или объединенные) вместе.

Затем используйте, lessчтобы открыть файл и найти псевдоним, используя /aliasname.

Теперь сравните, где этот псевдоним появляется по отношению к другим строкам в файле. Например, в большинстве систем, /etc/bash.bashrcимеет свой комментарий на вершине , которая говорит /etc/bash.bashrcи ~/.bashrcимеет тоже.

Если он находится выше вашей вершины ~/.bashrc, то это, вероятно, файл запуска, /etcкоторый определяет псевдоним, в противном случае он находится в вашем ~/.bashrcфайле или в файле, который он включает с помощью sourceили .(точка).

Если это не показывает псевдоним, попробуйте

bash -l -v >bash-l.out 2>&1

Это говорит о том, что bash - это оболочка для входа в систему, которая читает несколько разных файлов запуска, например, /etc/profileа ~/.bash_profileне /etc/bash.bashrcи ~/.bashrc.

Баш-х

Если bash -vне дает определенного ответа, попробуйте bash -xвыполнить команду, которая печатает команды, которые выполняет оболочка, а не строки, которые читает ваша оболочка.

Метод в основном такой же, как указано выше, за исключением изменения -vна -x. (Вы можете использовать оба вместе, если необходимо.)

Запустить только с одним файлом запуска

bash -i --rcfile="$HOME/.bashrc"

и посмотреть, есть ли у вас псевдоним.

Попробуйте то же самое с rcfileset to, /etc/bash.bashrcесли ваша система имеет это.

Тогда попробуй

bash -l --rcfile="$HOME/.bash_profile"

и делать то же самое с каждым файлом запуска bash, который имеет profileсвое имя, например, изменить $HOME/.bash_profileна /etc/profile.

Какой бы способ ни показывал псевдоним, он указывает файл, на который вы должны начать смотреть.

Mikel
источник
2

Может твой .xinitrc? Вы также должны проверить, нет ли у вас .bashrcили .bash_profileдругих файлов в них. Например, я храню все свои псевдонимы в отдельном файле, на который ссылается эта команда:

[ -f ~/.bash_alias ] && source $HOME/.bash_alias

Некоторые вопросы, которые также могут помочь: это для обычного пользователя или пользователя root? Какая это команда? Какой вкус у Linux?

SigueSigueBen
источник
0

Я следую очень распространенной практике помещения моих псевдонимов в

~/.bash_aliases

а затем вызывая это из .bashrc с

[ -f ~/.bash_aliases ] && source $HOME/.bash_aliases
Майкл Даррант
источник
могу ли я догадаться, что вы имеете в виду .bash_aliases во второй команде вместо .bash_alias?
stagl