У мене є кілька речей, які я хочу виконати в .bashrc, і я хотів би існувати в іншому файлі системи. Як я можу включити цей файл у .bashrc?
У мене є кілька речей, які я хочу виконати в .bashrc, і я хотів би існувати в іншому файлі системи. Як я можу включити цей файл у .bashrc?
Відповіді:
Додайте source /whatever/file
(або . /whatever/file
) .bashrc
туди, куди потрібно включити інший файл.
Щоб запобігти помилкам, спочатку потрібно перевірити наявність файлу. Потім відкрийте файл у вихідному коді. Зробіть щось подібне.
# include .bashrc if it exists
if [ -f $HOME/.bashrc_aliases ]; then
. $HOME/.bashrc_aliases
fi
if [ -f ~/.bashrc_aliases ];
не працює.
Ось один лайнер!
[ -f $HOME/.bashrc_aliases ] && . $HOME/.bashrc_aliases
Цікавий факт: оболонка (і більшість інших мов) ледачі. Якщо існує ряд умов, об’єднаних сполучником (він же "і" він же &&
), тоді оцінка розпочнеться зліва направо. У момент, коли одна з умов помилкова, решта виразів не обчислюється, ефективно "коротке замикання" інших виразів.
Таким чином, ви можете поставити команду, яку ви хочете виконати, праворуч від умовного, вона не буде виконуватися, якщо кожна умова зліва не буде оцінена як "істинна".
Якщо у вас є кілька файлів, які ви хочете завантажити, які можуть існувати, а можуть і не існувати, ви можете зберегти його дещо елегантним, використовуючи цикл 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