【问题标题】:Command passed as argument to shell script命令作为参数传递给 shell 脚本
【发布时间】:2010-04-28 19:55:17
【问题描述】:

我想将命令传递给 shell 脚本。该命令是一个 grep 命令。执行时出现以下错误,请帮忙:

myscript.sh "egrep 'ERROR|FATAL' \*20100428\*.log | grep -v aString"

myscript.sh 是一个简单的脚本:

#!/bin/ksh

cd log

$1

错误是:

egrep: can't open |
egrep: can't open grep
egrep: can't open -v
egrep: can't open aString

错误是因为 egrap 将 |、grep、-v 和 aString 视为参数。

【问题讨论】:

    标签: unix shell scripting


    【解决方案1】:

    试试这个:

    eval $1
    

    【讨论】:

    • 更正确的版本是eval "$1",它可以处理多个空格字符并防止文件通配。
    【解决方案2】:

    您可以调用sh -c $1 来调用第一个参数作为新shell 中的命令,以便扩展shell 特殊字符。

    【讨论】: