linux - 如何检查包含变量的字符串是否存在于 bash 的特定文件中?
问题描述
背景
我有两个文件:
~/.bash.local # $LOCAL_BASH_CONFIG_FILE
~/.fish.local # $LOCAL_FISH_CONFIG_FILE
我正在为 bash 脚本中的每个文件动态添加配置。每个文件由~/.bash_profile
forbash
或~/.config/fish/config.fish
for解析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)"
}
解决方案
经过一番研究,似乎可以使用以下方式完成此任务grep
:
if ! grep -q "$BASH_CONFIGS" "$LOCAL_BASH_CONFIG_FILE"; then
execute \
"printf '%s\n' '$BASH_CONFIGS' >> $LOCAL_BASH_CONFIG_FILE \
&& . $LOCAL_BASH_CONFIG_FILE" \
"n (update $LOCAL_BASH_CONFIG_FILE)"
fi
if ! grep -q "$FISH_CONFIGS" "$LOCAL_FISH_CONFIG_FILE"; then
execute \
"printf '%s\n' '$FISH_CONFIGS' >> $LOCAL_FISH_CONFIG_FILE" \
"n (update $LOCAL_FISH_CONFIG_FILE)"
fi
grep
是一个命令行实用程序,可以使用常见的正则表达式语法搜索和过滤文本。
要搜索确切的字符串:grep search_string path/to/file
要在安静模式下搜索确切的字符串:grep -q search_string path/to/file
grep -q
只会搜索文件,直到找到匹配项。
推荐阅读
- javascript - 防止 createElement 创建多个相同的图像
- java - RecyclerView 使应用程序崩溃
- javascript - js给元素添加特定样式的标题
- docker - 无法将我的应用程序打开到公共网络
- r - 使用 dplyr 计算时间戳上的累积总和
- docker - Docker:无法挂载卷
- pandas - 将随机数据中的数据从 10, 100 替换为 size(4,10)
- javascript - 找出有多少数组值具有绝对值
- serverless-framework - 在`serverless.yml`中部署调用外部JS函数的警告
- python - Python每次在for循环中将变量重置为默认值