Можно ли проверить, где был определен псевдоним?

Прежде всего, обратите внимание, что apt-get update по-прежнему обновляет свои индексы соответствующим образом, он просто жалуется, что не может загрузить информацию, необходимую для некоторых из своих репозиториев.

sarah - это кодовое имя Mint, а не кодовое имя Ubuntu, поэтому нет смысла пытаться использовать репозиторий sarah , размещенный на Canonical; вы можете безопасно удалить дополнительные репозитории:

sudo rm /etc/apt/sources.list.d/additional-repositories.list

Это исправит наблюдаемые вами ошибки.

24
11.11.2016, 00:09
5 ответов

Определение вручную будет трудно обнаружить (возможно, в журналах истории), хотя оболочка просит показать, что она делает, а затем grep должен помочь найти те, которые заданы в файле rc:

bash -ixlc : 2>&1 | grep ...
zsh -ixc : 2>&1 | grep ...

Если оболочка не точно захватывает необходимые параметры с помощью одного из вышеуказанных вызовов (которые интерактивно запускают нулевую команду), то сценарий :

script somethingtogrep thatstrangeshell -x
...
grep ... somethingtogrep

Другой вариант - использовать что-то вроде strace или sysdig , чтобы найти все файлы, которых касается оболочка, а затем ввести grep те вручную (удобно, если оболочка или программа не имеют флага -x ); стандартных файлов RC недостаточно для ручной проверки имени файла, если что-то вроде oh-my-zsh или конфигурации для конкретного сайта вытягивают код неизвестно откуда (или также могут быть переменные среды, как указывает sorontar в своем ответе) .

57
27.01.2020, 19:41

Вот где я нахожу grep -rl очень полезным:

grep -rl alias ~/.bash* ~/.profile /etc/profile /etc/bash.bashrc

скажет вам, в каком файле используется слово alias.

Вероятно, в ~/.bashrc и наверняка в ~/.bash_aliases, если он существует.


Однако невозможно быть абсолютно уверенным, что это охватывает все опции. Эти файлы также могут вызывать или загружать любые другие файлы. Переменная окружения типа ENV или $BASH_ENV может направить bash на загрузку других файлов.

ищет переменную BASH_ENV в окружении, расширяет ее значение, если оно там появляется, и использует расширенное значение как имя файла для чтения и выполнения.

А псевдонимы можно даже определить, задав переменную (выделение мое):

BASH_ALIASES
Переменная ассоциативного массива, члены которого соответствуют внутреннему списку псевдонимов, поддерживаемому встроенным модулем псевдонимов. Элементы, добавленные в этот массив, появляются в списке псевдонимов

11
27.01.2020, 19:41

Объединив ответ thrig с предложением @MarkPlotnick , вы можете проверить, установлен ли BASH_ALIASES[ll]для сужения круга вопросов. Здесь особенно полезны массив BASH_SOURCEи переменные LINENO. К сожалению, проверка того, установлен ли BASH_ALIASES[ll], будет успешной только после установки псевдонима, поэтому первая такая строка может быть вообще в другом файле.

PS4='${BASH_ALIASES["ll"]+"The ll alias has been defined before"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |&
  grep 'll alias' -m1 -B1

Вывод в виде:

   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
TThe ll alias has been defined before /home/muru/.bashrc:116 alias 'ping=ping -c5'

С помощью этой проверки можно даже завершить работу оболочки:

$ PS4='${BASH_ALIASES["ll"]+"$(kill -9 $$)"} ${BASH_SOURCE}:$LINENO ' bash -lixc : |& tail -n1
   /home/muru/.bash_aliases:1 alias 'll=ls -AlhF'
1
27.01.2020, 19:41

Наконец-то я нашел 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:

alias ll='ls -l --color=auto' 2>/dev/null
alias l.='ls -d.* --color=auto' 2>/dev/null
alias ls='ls --color=auto' 2>/dev/null

colorls.cshесть эквивалентные псевдонимы.)

-1
27.01.2020, 19:41

Сначала используйте следующие команды

Список всех функций

functions 

Список всех псевдонимов

alias 

Если вы не можете найти псевдоним или функцию, рассмотрите более агрессивный метод поиска

Bash-версия

bash -ixlc : 2>&1 | grep thingToSearchHere

Зш версия

zsh -ixc : 2>&1 | grep thingToSearchHere

Краткое описание опций

-i     Force shell to be interactive.

-c     Take the first argument as a command to execute

-x      -- equivalent to --xtrace

-l      Make bash act as if invoked as a login shell
6
27.01.2020, 19:41

Теги

Похожие вопросы