2013-03-05 109 views
0

我試圖編譯和使用G ++執行程序的環境中,然後我得到了命令:直接運行命令VS從變量

g++ -o example example.cpp && ./example 

,它運行正常。我試圖設置環境變量,以節省我的時間:

COMPRUN="g++ -o example example.cpp && ./example" 

(該echo $COMPRUN告訴我的任務是沒問題的)。但是當我嘗試使用$COMPRUN執行它時,我得到了g++: error: &&: No such file or directory

別名工作正常(所以我原來的問題就解決了),而是一個環境變量不。

爲什麼運行比從一個環境變量運行它直接不同的命令?命令行是如何解釋我的命令來得到'沒有這樣的文件'的錯誤?

回答

1

使用外殼的功能,而不是一個變量,以封裝任意代碼。命令行已經分析之後發生

$ comprun() { 
    g++ -o "$1" "$1".cpp && ./"$1" 
} 
$ comprun example 

參數擴展,所以任何句法結構(如&&)不被識別。在你的情況,不存在該文件是「& &」。

1

你得到這個錯誤的原因是因爲shell做了而不是來解釋命令行。因爲&&被視爲一個簡單的字符串(在您的命令的上下文中的文件名),而不是被解釋爲控制運算符。您必須使用eval $COMPRUN來讓shell實際評估命令字符串。