Какова цель .bashrc и как это работает?

Кто-то упомянул на stackoverflow в trees страница справочника, что это то, почему -P переключатель не исключает вещи, которые не соответствуют шаблону.

BUGS
   Tree  does not prune "empty" directories when the -P and -I options are
   used.  Tree prints directories as it comes to them, so  cannot  accumu‐
   late  information  on files and directories beneath the directory it is
   printing.

Таким образом, это, кажется, не возможно получить tree отфильтровать его вывод с помощью переключателя-P.

РЕДАКТИРОВАНИЕ № 1

От вопроса я отправил на том, Так, чтобы был закрыт. Кто-то, @fhauri, разместил следующую информацию как альтернативные способы выполнить то, что я пытался сделать с tree команда. Я добавляю их к своему ответу здесь для полноты.

-d переключатель просит не печатать файлы:

    -d     List directories only.

Таким образом, если Вы ХОТИТЕ, используют это, Вы могли:

tree tstdir -P '*qm*' -L 1 | grep -B1 -- '-- .*qm'
|-- id1
|   `-- aqm_P1800-id1.0200.bin
--
|-- id165
|   `-- aqm_P1800-id165.0200.bin
|-- id166
|   `-- aqm_P1800-id166.0200.bin
--
|-- id17
|   `-- aqm_P1800-id17.0200.bin
--
|-- id18
|   `-- aqm_P1800-id18.0200.bin
--
|-- id2
|   `-- aqm_P1800-id2.0200.bin

Вообще, если Вы используете -L 1,

   -L level
          Max display depth of the directory tree.

Вы могли лучше использовать (в ударе) этот синтаксис:

cd tstdir
echo */*qm*

или

printf "%s\n" */*qm*

и если только dir необходим:

printf "%s\n" */*qm* | sed 's|/.*$||' | uniq

Вообще Вы могли сделать это очень быстро если чистый удар:

declare -A array;for file in  */*qm* ;do array[${file%/*}]='';done;echo "${!array[@]}"

Это могло быть объяснено:

cd tstdir
declare -A array          # Declare associative array, (named ``array'')
for file in  */*qm* ;do   # For each *qm* in a subdirectory from there
    array[${file%/*}]=''  # Set a entry in array named as directory, containing nothing
  done
echo "${!array[@]}"         # print each entrys in array.

... если бы нет никакого шаблона соответствия файла, результат отобразился бы *. таким образом для идеального задание, там оставленное сделать:

resultList=("${!array[@]}")
[ -d "$resultList" ] || unset $resultList

(Это было бы намного более быстро, чем

declare -A array
for file in  */*qm*; do
    [ "$file" == "*/*qm*" ] || array[${file%/*}]=''
  done
echo "${!array[@]}"

)

155
14.05.2014, 02:13
3 ответа

.bashrc - это сценарий оболочки , который Bash запускается всякий раз, когда он запускается в интерактивном режиме. Он инициализирует интерактивный сеанс оболочки. Вы можете поместить в этот файл любую команду, которую вы можете ввести в командной строке.

Здесь вы помещаете команды для настройки оболочки для использования в вашей конкретной среде или для настройки вещей в соответствии с вашими предпочтениями. Обычно в .bashrc помещают псевдонимы , которые должны быть всегда доступны.

.bashrc запускается каждый запуск интерактивной оболочки. Если вы скажете:

$ bash ; bash ; bash

, а затем трижды нажмете Ctrl-D , .bashrc запустится три раза. Но если вы вместо этого скажете:

$ bash -c exit ; bash -c exit ; bash -c exit

, тогда .bashrc не будет запускаться вообще, поскольку -c делает вызов Bash не интерактивным. То же самое верно и при запуске сценария оболочки из файла.

Контраст .bash_profile и .profile , которые запускаются только при запуске новой оболочки входа в систему. ( bash -l ) Вы выбираете, будет ли команда идти в .bashrc vs .bash_profile в зависимости от того, хотите ли вы, чтобы он запускался один раз или при каждом запуске интерактивной оболочки.

В качестве контрпримера к псевдонимам, которые я предпочитаю помещать в .bashrc , вы хотите внести изменения в PATH в .bash_profile , поскольку эти изменения обычно не являются идемпотентными :

export PATH="$PATH:/some/addition"

Если вместо этого вы поместите это в .bashrc , каждый раз, когда вы запускаете интерактивную под-оболочку, : / some / add снова будет прикреплен к концу PATH , создавая дополнительную работу для оболочки, если вы ошибетесь при вводе команды.

Вы получаете новую интерактивную оболочку Bash всякий раз, когда выполняете оболочку из vi , например, с помощью : sh .

151
27.01.2020, 19:27
[1123865] Назначение файла [1124296].bashrc[1124297] - предоставить место, где вы можете установить переменные, функции и псевдонимы, определить вашу (PS1) подсказку и определить другие настройки, которые вы хотите использовать каждый раз, когда открываете новое терминальное окно.
  • Он работает, будучи запущенным каждый раз, когда вы открываете новый терминал, окно или панель.
  • Сверхминимум может иметь следующее:

    Это все, что вы действительно знаете, чтобы начать

    Вот "overkill" версия, полезная для опытных разработчиков:

    :helptags ~/.vim/doc
    
    Опытный разработчик часто будет иметь намного больше.[1124298]. С моим можно ознакомиться здесь [1124299](pic с подсветкой синтаксиса)[1124300]:

    Объяснение:

    -1. Настройте мой файл истории так, чтобы он игнорировал дубликаты и был намного больше, чем по умолчанию.[1124301]:

    -1. -2. Опция цвета для [1124302]ls[1124303] в зависимости от того, используете ли вы linux или OSX[1124304]. -3. Функция "[1124305]md[1124306]" для создания и cd в каталог одной командой[1124307]. -4. Найдите текущую ветку git'а, если в git-репо и...[1124308]. -5. -9. Определите удивительную подсказку PS1, как в

    -10. Улучшенная подсказка PS2[1124311]. -11. Установите vi в качестве редактора в командной строке[1124312]. -12. Установите vi в качестве редактора по умолчанию[1124313]. -13. выполните мой [1124314].bash_aliases[1124315] файл, если он существует[1124316]. -14. Выполните мой git вкладки завершения скрипта (для пультов и ветвей), если он существует.[1124317]. -15. Выполните автопереход, если он существует[1124318]. -16. Разрешить cd'ing без набора части cd, если версия bash >= 4[1124319]. -17. Выполнить скрипт завершения баша, если он существует[1124320]. -18. Используйте TMUX, если он присутствует[1124321]. -19. Добавьте rvm к моему PATH[1124322]. -20. Используйте rvm, если он существует.

    Я сделал этот портатив таким, что он работает на любой из моих линуксов или OSX машин без настройки - поэтому перед использованием определенных функций и других скриптов выполняется ряд тестов на наличие.

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

    REMINDER - если вы меняете свой .bashrc, обязательно запустите новое терминальное окно, чтобы убедиться, что оно работает ДО перезагрузки (лучшая практика - сделайте это сразу после изменения). Если вы когда-нибудь испортите свой .bashrc и перезагрузитесь, вы НЕ МОЖЕТЕ БЫТЬ ОТКАЗАНЫВАТЬСЯ В ВХОД! Лично я также создаю второго пользователя 'admin' на персональных машинах, чтобы в такой экстренной ситуации (сломанный логин) я мог войти в систему и затем использовать sudo для исправления моего другого файла входа в .bashrc.[1123887].
    28
    27.01.2020, 19:27

    Это конфигурационный файл bash .

    Интерактивные (не входящие в систему) оболочки, затем конфигурация считывается из этих файлов:

    • $ HOME / .bashrc

    Для оболочки входа конфигурация считывается из следующих файлов:

    • / etc / profile (Источник всегда)
    • $ HOME / .bash_profile (остальные файлы проверяются по порядку, пока не будет найден один, а затем другие не будут прочитаны)
    • $ HOME / .bash_login
    • $ HOME / .profile

    Простая иллюстрация того, как / когда они загружаются, представлена ​​на изображении ниже.

    Я добавил echo в мои .bashrc и .bash_profile

    Interactive shell vs login shell

    , см. man bash для получения дополнительной информации

    {{1 }}
    7
    27.01.2020, 19:27

    Теги

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