传递星号的Shell脚本
我继承了一个shell脚本,它使用变量执行命令。 我已经添加了更多的细节,很抱歉我之前不清楚细节,我对Shell脚本不是很熟悉传递星号的Shell脚本,shell,Shell,我继承了一个shell脚本,它使用变量执行命令。 我已经添加了更多的细节,很抱歉我之前不清楚细节,我对Shell脚本不是很熟悉 #!/bin/sh ExecuteCommand () { Command=`echo -e ${2}` Comment=${4} echo "INFO: ${Comment}" echo "# ${Comment}" >> ${CommandsLog} echo "${Command}" | paste -s -d'
#!/bin/sh
ExecuteCommand () {
Command=`echo -e ${2}`
Comment=${4}
echo "INFO: ${Comment}"
echo "# ${Comment}" >> ${CommandsLog}
echo "${Command}" | paste -s -d' ' | tee -a ${CommandsLog}
echo "" | tee -a ${CommandsLog}
eval ${Command} | grep -v "ERROR : bad number of fields"
ExitCode=$?
if [ "${ExitCode}" != "0" ] && [ "${ExitCode}" != "" ]
then
exit ${ExitCode}
fi
}
set Option = echo ` '.*(def).*'`
echo $Option
ExecuteCommand -command "abc ${Option}"
查看日志,正在执行的命令没有“*
”;
i、 e
由于该命令缺少“”,因此该命令失败
我试图在“$Option”中传递变量,但失败了。
如何将“”传递给命令 看来原作者对shell脚本也不是很熟悉 我不确定你到底想在这里做什么,但以下是我对这里应该发生的事情的解释(?):
你的问题不清楚。舍邦线还可以。下一行执行名为
ExecuteCommand
的命令,其中一个选项是-command
,另一个选项是展开“abc${option}”
的结果,但脚本中没有设置${option}
,所以它要么是空的,要么是一个环境变量——但是您没有告诉我们环境变量中的内容。第三行代码选择以命令名的形式运行${Option}
中的任何内容,或者,如果${Option}
中没有任何内容,则使用一些参数运行命令is
。发生了什么?现在,如果“脚本的第三行”实际上运行的文本是“环境变量选项设置为.*”
,那么我们就进入了另一场球赛(可能是板球而不是棒球)。但是,关于如何将信息传递到日志文件,仍有许多未知因素。也就是说,如何获得星号的空白并不明显。一般来说,引用星号会阻止它们被扩展。正确地提到上述所有不确定性,唯一的建议是在${Option}周围包含单引号
在您的命令中。(例如,“abc'${Option}'”
。我不能保证这会解决问题,但它在可能的范围内。我不知道行set Option=echo``.*(def)。*`
应该做什么。如果我没有命令*(def),它对我有什么作用.
kicking-ound,将$1
设置为选项
,$2
设置为=
,$3
设置为echo
。它还生成了错误消息bash:.*:未找到命令
。
.*(def).*
abc '. (def). '
#!/bin/sh
LOGFILE=~/mylog
PS4="Command: -> " ## You can set this you don't like the default "+".
dowithlog(){
(set -x; $1) 2>>"$LOGFILE"
echo "Comment: $2" >> "$LOGFILE"
}
dowithlog "ls /tmp" "Ok, cool beans."