2014-10-28 73 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

猛砸正在擴大變量不了了之,並執行「讀」