我从文件中获取了一些命令,如果它们满足某些条件,它们就会运行。
假设从文件中读取的命令是$command
。
...
if [ $doCmd -eq 1 ]
then
$command
doCmd=0
break
fi
...
脚本可以使用ls
这样的单字命令。但是,ls -l
或echo "test"
等多个单词命令会导致此错误:
x.sh: line x: ls -l: command not found
实现目标的正确途径是什么?感谢。
答案 0 :(得分:0)
报价帮助。
这是终端中的一个示例,您可以从此处获取它以使其在脚本中工作:
$ c='ls -l'
$ $c
total 168
drwx------+ 4 ray staff 136 Aug 3 14:27 Desktop
drwx------+ 11 ray staff 374 Jul 17 15:56 Documents
.
.
.
答案 1 :(得分:0)
如果你的shell没有使用IFS在open中拆分变量,$ command将不会扩展为两个aguments(ls和-l),它们会将“ls -l”解释为命令本身的单个名称。如果您正在使用bash,则可以使用数组。并且将变量放在引号周围总是好的:
command=(ls -l)
if [ "$doCmd" -eq 1 ]
then
"${command[@]}"
doCmd=0
break
fi
还有更好的条件表达式:
if [[ doCmd -eq 1 ]]
或条件算术:
if (( doCmd == 1 ))
Eval实际上可以是一个选项,但它很危险,因为它不仅仅是重新表达命令,而且还包括shell的一般语法。
if [ "$doCmd" -eq 1 ]
then
eval "$command"
doCmd=0
break
fi