Включити додаткові файли в .bashrc


76

У мене є кілька речей, які я хочу виконати в .bashrc, і я хотів би існувати в іншому файлі системи. Як я можу включити цей файл у .bashrc?


Чи слід це питання розміщувати на Unix & Linux Stack Exchange?
Кейл Суїні,

Відповіді:


117

Додайте source /whatever/file(або . /whatever/file) .bashrcтуди, куди потрібно включити інший файл.


21
Ви повинні граційно обробляти неіснування. наприклад, або перевірити наявність (test -r path &&. path), або ігнорувати помилки (. path 2> / dev / null)
William Pursell

2
@William Pursell IMO легше один раз протестувати, а потім написати код для випадків, що 99,99% ніколи не трапляється.
Даніель

5
@Daniel Я не згоден. Те, що трапляється .01% випадків, може відбуватися тисячі разів на секунду. А наявність .bashrc на змонтованому NFS $ HOME може означати, що рівень відмов у пошуку джерела файлу набагато перевищує .01%
Вільям Перселл,

60

Щоб запобігти помилкам, спочатку потрібно перевірити наявність файлу. Потім відкрийте файл у вихідному коді. Зробіть щось подібне.

# include .bashrc if it exists
if [ -f $HOME/.bashrc_aliases ]; then
    . $HOME/.bashrc_aliases
fi

3
також наприкінці файлу .bashrc_aliases або будь-якого іншого файлу, який я отримую, я повторюю вислів на зразок echo "Псевдоніми завантажені"
Нік

2
Я подумав собі: "~ це $ HOME, так?" На жаль, if [ -f ~/.bashrc_aliases ];не працює.
modle13

8

Ось один лайнер!

[ -f $HOME/.bashrc_aliases ] && . $HOME/.bashrc_aliases

Цікавий факт: оболонка (і більшість інших мов) ледачі. Якщо існує ряд умов, об’єднаних сполучником (він же "і" він же &&), тоді оцінка розпочнеться зліва направо. У момент, коли одна з умов помилкова, решта виразів не обчислюється, ефективно "коротке замикання" інших виразів.

Таким чином, ви можете поставити команду, яку ви хочете виконати, праворуч від умовного, вона не буде виконуватися, якщо кожна умова зліва не буде оцінена як "істинна".


2

Якщо у вас є кілька файлів, які ви хочете завантажити, які можуть існувати, а можуть і не існувати, ви можете зберегти його дещо елегантним, використовуючи цикл for.

files=(somefile1 somefile2)
path="$HOME/path/to/dir/containing/files/"
for file in ${files[@]}
do 
    file_to_load=$path$file
    if [ -f "$file_to_load" ];
    then
        . $file_to_load
        echo "loaded $file_to_load"
    fi
done

Результат буде виглядати так:

$ . ~/.bashrc
loaded $HOME/path/to/dir/containing/files/somefile1
loaded $HOME/path/to/dir/containing/files/somefile2

Звичайно, вам не потрібно перевіряти наявність файлів знову в циклі? (Якщо у вас немає дуже динамічного списку файлів на диску)
Джон Марк Скарборо

Існує лише одна перевірка наявності файлу. Якщо у вашому поточному робочому середовищі немає файлу, описаного у списку, він просто помилиться при завантаженні цього файлу та створить візуальний шум. Більш ідеальним підходом було б отримати список файлів, а потім прокрутити його, а не визначати статичний список.
modle13

0

Я вважаю за краще спочатку перевірити версію і призначити змінну для конфігурації шляху:

if [ -n "${BASH_VERSION}" ]; then
  filepath="${HOME}/ls_colors/monokai.sh"
  if [ -f "$filepath" ]; then
    source "$filepath"
  fi
fi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.