Псевдоним, такой как ll
определен alias
командой.
Я могу проверить команду с такими вещами, как, например, type ll
печать
ll is aliased to `ls -l --color=auto'
или command -v ll
какие отпечатки
alias ll='ls -l --color=auto'
или alias ll
который также печатает
alias ll='ls -l --color=auto'
но я не могу найти, где был определен псевдоним, то есть файл, например .bashrc
, или, возможно, вручную в работающей оболочке. На данный момент я не уверен, возможно ли это вообще.
Должен ли я просто просмотреть все файлы, которые загружены bash
и проверить каждый из них?
bash -xl
Ответы:
Ручное определение будет трудно определить (возможно, журналы истории), хотя попросить оболочку показать, что он делает, и затем
grep
должно помочь найти те, которые установлены в файле rc:Если оболочка точно не захватывает необходимые параметры одним из приведенных выше вызовов (которые в интерактивном режиме запускают команду null), то
script
:Другой вариант - использовать что-то вроде
strace
илиsysdig
найти все файлы, к которым прикасается оболочка, а затем перейти наgrep
них вручную (удобно, если у оболочки или программы нет-x
флага); стандартных RC-файлов недостаточно для ручной проверки имени файла, если что-то вроде oh-my-zsh или конфигураций, специфичных для конкретного сайта, извлекает код из того, кто знает, где (или также могут быть переменные окружения, как указывает sorontar в своем ответе) ,источник
PS4='+The ll alias is "${BASH_ALIASES["ll"]}" ' bash -ixlc :
Вот где я нахожу
grep -rl
очень полезным:скажет вам, в каком файле слово
alias
используется.Вероятно, в
~/.bashrc
и, безусловно, в том,~/.bash_aliases
если он существует.Однако невозможно быть абсолютно уверенным, что это охватывает все варианты. Эти файлы могут также вызывать или загружать любые другие файлы. Переменная окружения, такая как ENV или
$BASH_ENV
может направлять bash для загрузки некоторых других файлов.И псевдонимы могут быть даже определены путем установки переменной (выделено мое):
источник
grep -rl alias ~/.bash*
может ошибочно соответствовать файлам истории, но +1 за указание на массив BASH_ALIASES!Я не знаю, как на самом деле перечислить источник ваших псевдонимов, но так как похоже, что вы используете bash, я думаю, что это возможные исходные файлы:
Вы должны быть в состоянии пройти через них, чтобы найти псевдоним, например
grep 'ls -l --color=auto' /etc/profile ~/.profile /etc/bash.bashrc ~/.bash_profile ~/.bashrc
.источник
bash -x
, как вы упомянули. Я полагал, что вышеприведенное было достаточно просто для быстрого запуска, и если он не находит псевдоним, вы можете прочитать шаги выполнения.Комбинируя ответ thrig в с @ предложением MarkPlotnick в , вы можете проверить , является ли
BASH_ALIASES[ll]
установлен сужать его вниз.BASH_SOURCE
Массив иLINENO
переменные здесь особенно полезны. К сожалению, проверка тогоBASH_ALIASES[ll]
, установлен ли параметр, будет успешной только после того, как псевдоним был установлен, и поэтому первая такая строка может быть в другом файле.Давать вывод как:
Вы даже можете завершить оболочку, используя эту проверку:
источник
Я имел успех, просто используя
which
.источник
which
может обрабатывать псевдонимы в tcsh (и, возможно, в более ранних версиях csh) и zsh, где он является встроенным, и в bash, используя профиль по умолчанию в семействе RedHat, в котором есть kludge для запуска (внешней) программы GNU, но передают данные псевдонима оболочки, в противном случае нет , Более важно то, что он говорит только о том, какой псевдоним установлен, а не о том, где он был установлен, как это было здесь.Проверьте ~ / .profile, если его нет в ~ / .bashrc
источник
Наконец, я нашел
ll
определение псевдонима для нашего веб-сервера (CentOS) в двух сценариях оболочки/etc/profile.d/
:/etc/profile.d/colorls.csh
/etc/profile.d/colorls.sh
Я нашел его первым обучение из комментариев выше , где общесистемного профиль был:
/etc/profile
. В этом файле говорится, что псевдонимы для всей системы определены/etc/bashrc
, и в этом файле я увидел, что он просматривает несколько сценариев оболочки/etc/profile.d/
, поэтому я использовалgrep
этот каталог и, наконец, нашел определения. Я также обнаружил, что естьl.
псевдоним, в котором перечислены все файлы точек:От
colorls.sh
:(Есть эквивалентные псевдонимы в
colorls.csh
.)источник
Сначала используйте следующие команды
Список всех функций
Список всех псевдонимов
Если вы не можете найти псевдоним или функцию, используйте более агрессивный метод поиска.
Bash версия
Zsh версия
Краткое объяснение опций
источник