【发布时间】:2015-12-25 19:29:25
【问题描述】:
我正在编写一个充当“会说话的终端”的脚本(您输入命令并显示输出),到目前为止我的代码是:
#!/bin/bash
while [ 1=1 ]; do
echo -n "~>"
read COMMAND
espeak "$($COMMAND)"
done
它适用于简单的命令:
bash$ ./talkingterminal.sh
~> ls
# espeak says "talkingterminal.sh"
但是当我使用管道等时:
bash$ ./talkingterminal.sh
~>ip addr | grep inet
Command "|" is unknown, try "ip addr help".
~>
并且该命令在 bash 中工作并给出预期的输出。 有什么帮助吗? 谢谢, 马丁
【问题讨论】:
-
不是一个答案,但为了解释,我会说这是因为命令分离发生在初始分词阶段,所以扩展命令不能再将一个命令变成两个管道。参考:How to execute command stored in a variable? 因此
eval。