我有一个 shell 脚本,它将在内部调用一个变量(存储可执行 shell 脚本)
Shell 脚本启动
var=$(awk -F'|' '{print $2}' $TEMPFILE)
变量中的值为. /lapp2/Scripts/mdm.ksh
通过调用 shell 来执行它
$var
上述执行 shell 的方法失败(它是作为字符串读取的吗?)
但是,如果我直接编写命令,shell脚本会执行
答案1
您的变量$var
不包含您所说的应包含的值。根据你的问题,它应该包含以下内容:
. /lapp2/Scripts/mdm.ksh
但调试值echo "var is '$var'"
显示$var
实际上包含:
/etlapp2/$1/mdm/Scripts/mdmxftpg.pl /etlapp2/$1/mdm/Scripts/mdmxftpg.aimtlane
这里有两个问题。很明显,实际值不是预期值。但更微妙的是,请注意路径的一部分$var
包含文字$1
,而不是第一个命令行参数的插值。我怀疑您在分配 期间的某个时刻使用了单引号而不是双引号$var
。
对比这两种选择
a='apple'; var='/path/to/$a/script.sh'; echo "var=$var" # incorrect
a='apple'; var="/path/to/$a/script.sh"; echo "var=$var" # correct
您需要检查代码以找出该值不符合预期的原因并修复这些错误。