2013-03-05 172 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实际评估命令字符串。