在函数参数中发送shell命令不起作用

时间:2016-07-13 08:28:56

标签: bash shell unix scripting command

我正在开发一个shell脚本,我要求我需要从函数中运行所有命令。 我在我的脚本中写了下面的代码。

#!/bin/bash

function RUN_CMD() 
{
    CMD=${*}
    echo "Command launched: \"${CMD}\"."
    ($*)
    RETVAL=$?

    if [ $RETVAL = 0 ] ; then
        echo "Command successful: \"${CMD}\"."
    else
        echo "Command failed with RC=${RETVAL}: \"${CMD}\"."
    fi
    return $RETVAL
}
_cmd="tr -d 'the' < file.txt > file.new"
RUN_CMD "$_cmd"

执行此代码时,我遇到错误。

tr: extra operand ‘<’
Try 'tr --help' for more information.
Command failed with RC=1: "tr -d 'the' < file.txt > file.new".

我不知道我做错了什么。请帮忙。

2 个答案:

答案 0 :(得分:0)

当您以这种方式在函数中运行$*$@时,您无法处理重定向(管道等)。重定向运算符<>作为参数传递给tr。调用函数时需要使用重定向:

_cmd="tr -d the"
RUN_CMD "$_cmd" < file.txt > file.new

或使用eval

_cmd="tr -d 'the' < file.txt > file.new"
eval $_cmd

答案 1 :(得分:0)

您可以在子shell中运行命令:

#!/bin/bash

function RUN_CMD() 
{
    OUT=$(/bin/bash -c "$1")
    RETVAL=$?
    echo "Command launched: \"$1\"."
    if [ $RETVAL -eq 0 ] ; then
        echo "Command successful: \"$1\", \"OUT=${OUT}\""
    else
        echo "Command failed with RC=${RETVAL}: \"$1\", \"OUT=${OUT}\""
    fi
    return $RETVAL
}
_cmd="tr -d 't' < file.txt > file.out"
RUN_CMD "$_cmd"

最佳,   儒略