【发布时间】:2018-10-17 17:20:30
【问题描述】:
背景
我有两个文件:
~/.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将其放入指定文件中。 - 如果它包含在文件中,则不要再次添加。
我下面的脚本的目的是使用n-install 安装npm 包n 并将正确的配置添加到bash 和fish。
execute 是我定义的一个函数,用于在后台运行任务并使用微调器在屏幕上显示一条消息。
当前 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)"
}
【问题讨论】:
-
你只需要 something 比如
if ! grep -q N_PREFIX "$file"; then add it; fi -
@glennjackman 除了
BASH_CONFIGS或FISH_CONFIGS之外,有没有办法做同样的事情? -
当然可以。我试图给你一个提示,而不是整个解决方案。我认为很明显你会用...替换
$file...
标签: linux bash macos unix fish