我正在开发一个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".
我不知道我做错了什么。请帮忙。
答案 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"
最佳, 儒略