2014-10-28 37 views
0

我正在制作一个类似命令提示符(它没有完成)的shell,但它不起作用。这里是:Bash:制作我自己的shell

#!/bin/bash 
VER=$(lsb_release -sr) 
OS=$(lsb_release -si) 
echo "Linux [Distro $OS Version $VER]" 
echo "<c> None" 
echo -n "${PWD}>" 
read $cmd 
eval $cmd 

我在Crunchbang上运行。 当我运行它:

[email protected]:~$ ./cmd.sh 
Linux [Distro Debian Version 7.0] 
/home/crunchbang>echo "abc"  
[email protected]:~$ 

它应该是什么:

[email protected]:~$ ./cmd.sh 
Linux [Distro Debian Version 7.0] 
/home/crunchbang>echo "abc" 
abc 
[email protected]:~$ 

更妙的是:

[email protected]:~$ ./cmd.sh 
Linux [Distro Crunchbang Version 11] 
/home/crunchbang>echo "abc" 
abc 
[email protected]:~$ 
+0

这显然不是从代码的输出片断你给我们作为'echo“的输出没有任何版本中没有”'“。 – 2014-10-28 19:11:21

+0

我不知道为什么。我前一阵子发布了这个消息。 – 2016-10-26 11:31:59

回答

2

read $cmd不正确。你的意思是read cmd

您只能使用$来引用一个变量,而不是一个名称。

您的输入很有可能以$REPLY结束。

+2

+1如果'cmd'没有以前的值,'$ cmd'扩展为空字符串,'read'没有得到可选参数,并且使用REPLY。如果'cmd' *有一个值,比如'foo',那么'read $ cmd'会设置变量'foo'的值。 – chepner 2014-10-28 19:15:29

1

你需要采取$关闭读线

read cmd

猛砸正在扩大变量不了了之,并执行“读”