【发布时间】:2019-08-02 06:21:36
【问题描述】:
RH6 ksh93
我无法让 kornshell 脚本执行命令。以下两个变量在两个命令之间是常量
GLOBAL_CAT=/a/path/to/a/dir
DATA=/a/data/file.txt
命令 1: m_cat_add -catalog $GLOBAL_CAT -data $DATA -key '{aKey1}'
命令 2: m_cat_add -catalog $GLOBAL_CAT -data $DATA -key '{aKey1; aKey2}'
密切注意括在大括号内的单引号和分隔两个键值的分号
cmd1 和 cmd2 都可以很好地工作从键盘交互输入时 m_cat 命令要求 -key 的值用单引号括起来
现在我编写了一个方便的 kornshell 脚本:
GLOBAL_CAT=/a/path/to/a/dir
DATA=/a/data/file.txt
KEYY="{aKey1}"
CMDSTR="m_cat -catalog ${GLOBAL_CAT} -data ${DATA} -key '${KEYY}'"
`eval "$CMDSTR"` # works
KEYY="{aKey1; aKey2}"
CMDSTR="m_cat -catalog ${GLOBAL_CAT} -data ${DATA} -key '${KEYY}'"
`eval "$CMDSTR"` # m_cat throws a "usage" errmsg
因此,存在该分号时会发生一些微妙而奇怪的事情,就好像 ksh 在扩展 vars 后忽略了单引号并假定分号标记了命令的结尾,这是一个失败的语法m_cat 命令。
在现实世界中,我的脚本在 while 循环中从文件中读取三个变量,因此我不能只手动编辑 KEYY
有什么想法吗?反斜杠?以某种方式强制使用文字?
TIA,
还在学习的史蒂夫
【问题讨论】:
-
您能否包含
m_cat -catalog ${GLOBAL_CAT} -data ${DATA} -key '${KEYY}'输出?运行`eval "$CMDSTR"`意味着您再次将eval "$CMDSTR"输出作为命令执行。