【问题标题】:Sending shell command in function argument not working在函数参数中发送 shell 命令不起作用
【发布时间】:2016-11-15 17:32:30
【问题描述】:

我正在编写一个 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".

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

【问题讨论】:

标签: bash shell unix scripting command


【解决方案1】:

你可以在子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"

最好, 朱利安

【讨论】:

    【解决方案2】:

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

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

    或者使用eval:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 2017-06-19
      • 2013-06-05
      • 1970-01-01
      相关资源
      最近更新 更多