Фон
У меня есть два файла:
~/.bash.local # $LOCAL_BASH_CONFIG_FILE
~/.fish.local # $LOCAL_FISH_CONFIG_FILE
Я динамически добавляю конфигурациик каждому файлу в скрипте bash.Каждый файл анализируется либо ~/.bash_profile
, если он для bash
, либо ~/.config/fish/config.fish
, если он для fish
.реализовать эти конфигурации.
Однако я не хочу добавлять строки, которые конфигурируют двоичный файл, в любой файл каждый раз, когда я запускаю свой скрипт bash.Я хотел бы сделать следующее:
- Проверить, содержится ли строка (например,
BASH_CONFIG
или FISH_CONFIG
) в каждом указанном файле - Если она не содержитсявнутри файла
printf
в указанный файл. - Если он содержится в файле, не добавляйте его снова.
Цель моего скрипта ниже - установить пакет npm
n
, используя n-install и добавить правильную конфигурацию для bash
и fish
.
execute
- это функция, которую я определил для запуска задачи в фоновом режиме и отображения сообщения на экране с помощьюspinner.
Текущий фрагмент сценария Bash
add_n_configs() {
# bash
declare -r BASH_CONFIGS="
# n - Node version management.
export N_PREFIX=\"\$HOME/n\";
[[ :\$PATH: == *\":\$N_PREFIX/bin:\"* ]] || PATH+=\":\$N_PREFIX/bin\"
"
execute \
"printf '%s\n' '$BASH_CONFIGS' >> $LOCAL_BASH_CONFIG_FILE \
&& . $LOCAL_BASH_CONFIG_FILE" \
"n (update $LOCAL_BASH_CONFIG_FILE)"
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# fish
declare -r FISH_CONFIGS="
# n - Node version management.
set -xU N_PREFIX \"\$HOME/n\"
set -U fish_user_paths \"\$N_PREFIX/bin\" \$fish_user_paths
"
execute \
"printf '%s\n' '$FISH_CONFIGS' >> $LOCAL_FISH_CONFIG_FILE" \
"n (update $LOCAL_FISH_CONFIG_FILE)"
}