2

Мне понадобился bash для создания моего .bashrc при входе в систему на новом терминале на моем Mac (потому что он не делает этого при входе в новый терминал на macs, он делает только .bash_profile). Я нашел и успешно использовал эту команду и добавил ее в свой .bash_profile:

if [ -f ~/.bashrc ] && [ "${SHELL##*/}" == "bash" ]
then
  . ~/.bashrc
fi

В этой команде есть три вещи, которые я не понимаю.

  1. Что означает -f в первом условии?
  2. Что означает ##/ во втором условии?
  3. Я это понимаю ". ~/ .bashrc "должен иметь источник оболочки, который называется rc, но как в мире эта команда выполняет это? Что "." должен указать здесь?

2 ответа2

3
  1. -f - это предикат, который проверяет, существует ли конкретный файл (в данном случае ~/.bashrc).

  2. ##*/ как часть подстановки переменной означает удаление чего-либо, заканчивающегося на "/", от начала значения переменной - например, если бы SHELL был "/usr/local/bin/bash", он удалил бы "/usr/local/bin/"и просто дать" bash ". Подробно: ## означает удалить самое длинное совпадение из возможных, */ соответствует всему, что заканчивается на «/».

    Другие связанные параметры: # означает удаление самого короткого совпадения (т. Е. #*/ Удаляет через первое "/"), %% означает удаление максимально длинного совпадения с конца, а % означает удаление самого короткого совпадения с конца.

  3. . это более короткое имя для source команды - встроенная команда оболочки, которая выполняет содержимое сценария (в данном случае ~/.bashrc) в текущей оболочке. Обычно, если вы запускаете скрипт оболочки, он запускается в подоболочке, и любые переменные, псевдонимы, функции и т.д., Которые он определяет, теряются при его выходе; по source ИНГ его вместо этого, все это определяет, действительны в текущей оболочке.

1

1) проверяет, существует ли файл ~/.bashrc

2) $ {SHELL} - это переменная, которая содержит полный путь текущей оболочки. Если вы наберете echo $SHELL или echo ${SHELL} в терминале, он напечатает путь. $ {SHELL ## */} удаляет путь и просто печатает имя файла. Введите echo ${SHELL##*/} в терминале, чтобы увидеть.

3) период "." встроенная команда bash для запуска скрипта в текущем процессе IE это источник файла.


Таким образом, эта строка в основном говорит: «Если файл ~/.bashrc существует и текущая оболочка является оболочкой bash, то source ~/.bashrc»

Мой ~/.bash_profile просто содержит:

source $HOME/.bashrc

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .