我对shell脚本语法和协议不太熟悉。
我写了以下接受
的功能-
function quit {
\rm -f "~/script.lock"
exit
}
function abnormal_quit {
echo $'\n'
echo "Script Execution Terminated Abnormally.."
echo "STATUS :: FAIL"
quit
}
function exec_cmd {
command="$1"
continue_on_error="true"
if [ -z "$2" ]; then
continue_on_error="false"
fi
echo "========================================================"
echo "Executing command :-"
echo "$command ....."
if ${command[@]}
then
echo "Command Executed successfully with return code : $?"
echo "COMMAND - $command"
echo "==============================================================="
echo $'\n'
else
echo "Failed to execute command with return code :- $?"
echo "COMMAND - $command"
echo "==============================================================="
echo $'\n'
if [ $continue_on_error == "false" ]; then
abnormal_quit
fi
fi
}
log_file="output.log"
exec_cmd "ls -lrt >> $log_file"
如果我执行上面的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”命令的文件名参数。因此抛出错误“>>:没有这样的文件或目录”
答案 0 :(得分:2)
您可以使用eval
执行字符串中包含的命令。试试这个:
if eval "$command"
then
答案 1 :(得分:0)
尝试使用
执行命令command=`$1`
请记住,在脚本处于此行的那一刻,命令将被执行,而不是更晚,command
变量将保存此命令执行的结果
答案 2 :(得分:0)
由于您不熟悉语法和协议。请先了解他们。读取网络协议并不算太多。
首先 - 决定要使用的shell的类型。语法会根据此进行更改。
其次,从脚本要求,请确保使用简单的if语句检查验证您的必需参数,否则事情必然会发生故障。
无论如何,您已经将问题的答案视为eval。