用于执行命令和重定向输出的Shell函数

用于执行命令和重定向输出的Shell函数,shell,unix,Shell,Unix,我不太熟悉shell脚本语法和协议 我已经编写了以下函数接受 作为命令项参数的命令字符串 忽略错误作为可选参数 -- 如果我执行上面的shell脚本,它会给我以下错误 [root@localhost data]# sh test.sh ======================================================== Executing command :- ls -lrt >> log.out ..... ls: >>: No such

我不太熟悉shell脚本语法和协议

我已经编写了以下函数接受

  • 作为命令项参数的命令字符串
  • 忽略错误作为可选参数
--

如果我执行上面的shell脚本,它会给我以下错误

[root@localhost data]# sh test.sh
========================================================
Executing command :-
ls -lrt >> log.out .....
ls: >>: No such file or directory
ls: log.out: No such file or directory
Failed to execute command with return code :- 2
COMMAND - ls -lrt >> log.out
===============================================================

Script Execution Terminated Abnormally..
STATUS :: FAIL

这里的问题是-shell脚本假定“ls-lrt>>log.out”作为单个命令,重定向箭头被视为“ls”命令的文件名参数。因此抛出一个错误“>>:没有这样的文件或目录”

尝试使用

command=`$1`

请记住,该命令将在脚本位于此行时执行,而不是稍后执行,
command
变量将保存该命令执行的结果

您可以使用
eval
执行包含在字符串中的命令。试试这个:

if eval "$command"
then

因为您不熟悉语法和协议。请先了解他们。它不像网络协议那样容易阅读

首先-决定要使用的shell的类型。语法确实会因此而改变

第二,根据脚本要求,确保通过简单的if语句检查来验证您的强制参数,否则肯定会出错


不管怎样,您的问题的答案已经是eval了。

exec\u cmd“ls-lrt”>$log\u file
不起作用?Bob我想它会将
exec\u cmd
函数的结果输出到文件中,而不是
ls-lrt
Imho,您应该尝试在脚本中执行此命令,因为
command=`1`
无法再次工作。。。你能在你的机器上运行相同的脚本并让我知道它是否适合你吗?是的,它对我非常适合。你用的和我在回答中说的一模一样吗?eval是一个很好的结果,我给它加了一个加号。您可以编写
eval“$1”
,只是为了在您的函数中进行测试,您将看到它是有效的。这是真的。我想知道为什么它不起作用:)我在这里提出了一个问题:请学习stackoverflow协议,不要对已经回答的问题发表评论。。。。
if eval "$command"
then