我有一个不同行的文本文件,如:
VMNAME-1="blah1"
VMANME-2="blah2"
VMIP-1=12.34.56.78
VMIP-2=98.76.54.32
PASS="something"
USER="else"
我想阅读这个文本文件并在bash shell中使用这些值,如下所示:
create_vm.exp VMIP-1 USER PASS VMNAME-1
create_vm.exp VMIP-2 USER PASS VMNAME-2
关于如何做到这一点的任何建议?
答案 0 :(得分:0)
如同先前的评论所述,你应该
只需使用source / path / to / file并执行您的脚本,
由于您的文本文件的语法就像变量初始化。
采购实际上会运行您尝试在当前的来源中提供的文件
Bash环境。
当您打开终端并获取文本文件时,您可以使用
您设置的变量,如$ USER,$ PASS等。
您可以在脚本中执行相同的操作,以执行其他脚本。
答案 1 :(得分:0)
如果等号左侧的符号名称未包含-
,那么您可以简单地source
脚本,因为所有行都是有效的Bash表达式。
但是,这不是这种情况,因为VMNAME-1
和其他人确实包含-
,因此VMNAME-1
在Bash中不是有效的变量名。
如果您确定等号后面的所有值都不包含-
,那么您只需将-
的所有匹配项替换为_
即可使行有效Bash像这样的表达式:
. <(tr -- - _ < input.txt)
然后您可以编写如下的create VM命令:
create_vm.exp "$VMIP_1" "$USER" "$PASS" "$VMNAME_1"
create_vm.exp "$VMIP_2" "$USER" "$PASS" "$VMNAME_2"
如果值可能包含-
,那么您需要更加努力地仅在等号的左侧替换-
。这是一个可能的简单解决方法,在某些情况下可以使用,但可能不是全部:
. <(sed -e '/^V/s/-/_/' < input.txt)
仅在以-
开头的行中替换V
,并且仅替换首次出现的行。