【问题标题】:Executing a shell script from a file从文件执行 shell 脚本
【发布时间】:2014-10-27 08:50:32
【问题描述】:

我的操作系统平台是:SunOS machinehull01 5.10 Generic_148888-05 sun4v sparc SUNW,Sun-Fire-T200

我已经编写了一个从文件运行的 shell 脚本

文件名:test.sh

#!/bin/sh
VARNAME=$grep '-l' TestWord /home/hull/xml/text/*.txt
echo "Found $VARNAME"

当我在控制台中运行上述命令时,我得到了正确的输出而没有错误,但是当我运行 sh test.sh./test.sh我遇到了错误

test.sh: -l: not found
Found

有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: shell sh sunos


    【解决方案1】:

    您正在搜索所谓的“命令替换”:

    VARNAME=$(grep -l TestWord /home/hull/xml/text/*.txt)
    echo "Found $VARNAME"
    

    它将在子shell中执行$(和右括号)之间的命令,并将命令的输出返回到VARNAME

    【讨论】:

    • 当我在 test.sh 中添加括号时出现以下错误:第 2 行的语法错误:`WEEKLY=$' unexpected
    【解决方案2】:

    知道了。

    #!/bin/sh
    VARNAME=`grep -l TestWord /home/hull/xml/text/*.txt`
    echo "Found $VARNAME"
    

    我必须把那些 (`) 放在那里。

    【讨论】:

    • 这与hek2mgl 提供的答案相同(反引号是$(...) 的旧版本,不应在新代码中使用)。
    • 是的,但他的解决方案在 Solaris 中不起作用,但确实如此。
    • 哦,对了,Solaris 为/bin/sh 使用了非POSIX shell(我认为是实际的Bourne shell)。如果可能,您可以考虑切换到 Solaris 的 POSIX shell /usr/xpg4/bin/sh