在函数参数中发送 shell 命令不起作用
Posted
技术标签:
【中文标题】在函数参数中发送 shell 命令不起作用【英文标题】:Sending shell command in function argument not working 【发布时间】: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".
我不知道我做错了什么。请帮忙。
【问题讨论】:
I'm trying to put a command in a variable, but the complex cases always fail! 【参考方案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】:当您以这种方式在函数中运行 $*
或 $@
时,您无法处理重定向(管道等)。重定向运算符 <
和 >
作为参数传递给 tr
。调用函数时需要使用重定向:
_cmd="tr -d the"
RUN_CMD "$_cmd" < file.txt > file.new
或者使用eval
:
_cmd="tr -d 'the' < file.txt > file.new"
eval $_cmd
【讨论】:
以上是关于在函数参数中发送 shell 命令不起作用的主要内容,如果未能解决你的问题,请参考以下文章
字符串在我的函数中不起作用作为参数powershell [重复]