linux - 使用 grep 查找/剪切功能而不是源代码在 bash 中加载配置文件

标签 linux bash shell raspbian debian-based

我现在正在使用一个脚本,它通过 source 命令加载我所有的配置变量。它简单快捷有效。但我知道这不是一个非常安全的选择。

我读到我可以使用 $include 指令来获得相同的结果。这与 source 有什么不同或更安全,还是它们本质上相同?

如果上述两个选项都不安全,作为最后的选择,我试图理解我在 shell 脚本书籍中找到的 lookup 函数。它主要使用 grep、分隔符和 cut 从文件中执行变量名查找并检索值。这看起来很安全,我可以用它来修改我的脚本。

它几乎可以正常工作。我想我只需要将分隔符从 $TAB 更改为“=”,但我不确定它是如何工作的,或者它是否会工作。

我的配置文件格式:

Param=value

示例函数(来自笔记)

lookup() {
   grep "^$1$TAB" "$2" | cut -f2
}

用法:

lookup [options] KEY FILE
-f sets field delimiter
-k sets the number of field which has key
-v specifies which field to return

我正在使用 Debian 版本的 Raspbian Jessie Lite 以防语法问题。

最佳答案

而不是 grepcut你应该考虑使用 awk可以根据给定的分隔符轻松地进行搜索和剪切操作:

lookup() {
   key="$1"
   filename="$2"

   awk -F= -v key="$key" '$1 == key{print $2}' "$filename"

   # use this awk if = can be present in value part as well
   # awk -v key="^$key=" '$0 ~ key && sub(key, "")' "$filename"
}

这可以称为:

lookup search configfile.txt

-F=将分隔符设置为 =用于 awk 命令。

另请注意 $1$2单引号内是第 1 列和第 2 列,不应与位置 shell 变量 $1 混淆。 , $2等等

你应该看看getopts让它接受-f , -k等类型参数。

关于linux - 使用 grep 查找/剪切功能而不是源代码在 bash 中加载配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38966742/

相关文章:

linux - sed 命令复制有字符串的行

c++ - 如何在unix环境下将Poco库(libraries)链接到我们的程序

linux - 如何在不显示该目录的情况下使用特定目录的文件路径自动完成 bash 命令行?

mysql - 将命令中的密码从 .env 传递到 docker 内的 mysql

c - C 中的信号处理

linux - ls命令用于搜索当前目录中的特定文件

c - 如何在 C 中使用 getopt 和多个命令打印一次输出

mysql - Liferay 不再显示 UTF8 字符

linux - 在 Unix/Linux 中维护文件结构的特定文件类型的递归副本?

linux - 连接到 docker 容器中的特定 shell 实例?