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