使用 grep lookup/cut 函数而不是源来加载 bash 中的配置文件
using grep lookup/cut function instead of source to load config file in bash
我现在正在使用一个脚本,它通过 source
命令加载我所有的配置变量。它简单快捷有效。但我知道这不是一个非常安全的选择。
我了解到我可以使用 $include
指令来获得相同的结果。这与 source
有什么不同或更安全,还是它们本质上相同?
如果以上两个选项都不安全,作为最后的选择,我试图理解我在 shell 脚本书中找到的 lookup
函数。它基本上使用 grep
、分隔符和 cut
从文件中执行变量名查找并检索值。这看起来很安全,我可以用它来修改我的脚本。
它几乎可以正常工作。我想我只需要将分隔符从 $TAB 更改为“=”,但我不确定它是如何工作的,甚至不确定它是否会工作。
我的配置文件格式:
Param=value
示例函数(来自注释)
lookup() {
grep "^$TAB" "" | 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
我正在使用 Raspbian Jessie Lite 的 Debian 版本以防语法问题。
您应该考虑使用 awk
而不是 grep
和 cut
,它可以根据给定的分隔符轻松地执行搜索和剪切操作:
lookup() {
key=""
filename=""
awk -F= -v key="$key" ' == key{print }' "$filename"
# use this awk if = can be present in value part as well
# awk -v key="^$key=" '[=10=] ~ key && sub(key, "")' "$filename"
}
这可以称为:
lookup search configfile.txt
-F=
将 awk 命令的分隔符设置为 =
。
另请注意,单引号内的 </code> 和 <code>
是第 1 列和第 2 列,不应与位置 shell 变量 </code> 混淆, <code>
等
您应该查看 getopts
以使其接受 -f
、-k
等类型参数。
我现在正在使用一个脚本,它通过 source
命令加载我所有的配置变量。它简单快捷有效。但我知道这不是一个非常安全的选择。
我了解到我可以使用 $include
指令来获得相同的结果。这与 source
有什么不同或更安全,还是它们本质上相同?
如果以上两个选项都不安全,作为最后的选择,我试图理解我在 shell 脚本书中找到的 lookup
函数。它基本上使用 grep
、分隔符和 cut
从文件中执行变量名查找并检索值。这看起来很安全,我可以用它来修改我的脚本。
它几乎可以正常工作。我想我只需要将分隔符从 $TAB 更改为“=”,但我不确定它是如何工作的,甚至不确定它是否会工作。
我的配置文件格式:
Param=value
示例函数(来自注释)
lookup() {
grep "^$TAB" "" | 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
我正在使用 Raspbian Jessie Lite 的 Debian 版本以防语法问题。
您应该考虑使用 awk
而不是 grep
和 cut
,它可以根据给定的分隔符轻松地执行搜索和剪切操作:
lookup() {
key=""
filename=""
awk -F= -v key="$key" ' == key{print }' "$filename"
# use this awk if = can be present in value part as well
# awk -v key="^$key=" '[=10=] ~ key && sub(key, "")' "$filename"
}
这可以称为:
lookup search configfile.txt
-F=
将 awk 命令的分隔符设置为 =
。
另请注意,单引号内的 </code> 和 <code>
是第 1 列和第 2 列,不应与位置 shell 变量 </code> 混淆, <code>
等
您应该查看 getopts
以使其接受 -f
、-k
等类型参数。