我目前刚接触shell脚本,并遇到了一些我需要你帮助的问题。
我正在linux命令promt上运行shell脚本processmainjk.ksh。 此脚本在内部使用此条目调用另一个脚本
$PROC_BIN_DIR/admin/processsub.ksh -c $PROC_CONFIG_DIR/daily/processsub.cfg -m tkp
processsub.cfg的名称值条目类似于" prc_log_dir $ {PROCESS_LOG_DIR}"这些是由脚本processsub.ksh在内部读取的,代码如下
while read name value
do
value=`eval "echo $value"`
case "$name" in
prc_log_dir) LOGDIR=$value;;
prc_arch_dir) ARCHIVE_DIR=$value;;
esac
done < $config_file
if [ ! -d ${LOGDIR} ]; then
echo "ERROR:($PNAME)(Invalid or missing $LOGDIR)"
exit 1
fi
其中$ config_file是processsub.cfg。现在我不确定&#34;读取名称值&#34;正在脚本中,但我猜测它的配置文件中的读取名称值par。 while循环后的if块抛出错误。在命令提示符中单独调试它,并且正在挑选$ {LOGDIR},但我不知道为什么它在我运行脚本时不起作用。
当我第一次运行此脚本而没有任何更改时,它成功运行。后来我在配置文件processap.cfg中进行了一些更改并修改了它的权限,因为它不允许我编辑,当我再次运行它这次它给我以下错误
/testmac/bin/admin/processsub.ksh[52]: eval[1]: meaning: not found [No such file or directory]
)RROR:(/testmac/bin/admin/processsub.ksh)(Invalid or missing /testmac/bin/admin
如果您在错误&#34; 52&#34;中看到行号它指向while循环中的value = eval "echo $value"
。不确定此错误,但目录/ testmac / bin / admin存在于文件系统中。使用先前的更改运行相同的脚本会产生相同的错误。
有人可以帮我解决这个问题,让我知道如何解决它。现在长期坚持这个错误。
更新
非常感谢你们的帮助。实际的问题是,当我在Windows中编辑它并使用FileZilla将其传输到linux盒时,配置文件已经搞砸了。现在,linux上的所有操作都提示自己,一切正常
谢谢
答案 0 :(得分:0)
$value
包含诸如&#34 ;;意思是foo&#34;之类的内容。这意味着"echo $value"
会扩展为"echo ;meaning foo"
。当你评估这个时,你首先运行echo
没有参数,然后运行meaning foo
。但是meaning
不是一个有效的命令,因此脚本会爆炸。