Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递星号的Shell脚本_Shell - Fatal编程技术网

传递星号的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'

我继承了一个shell脚本,它使用变量执行命令。 我已经添加了更多的细节,很抱歉我之前不清楚细节,我对Shell脚本不是很熟悉

#!/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."