-1

我试图使用 g++ 编译和执行一个程序,然后我得到了命令:

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

它运行正常。我试图设置一个环境变量来节省我的时间:

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

echo $COMPRUN告诉我任务没问题)。但是当我尝试使用它来执行它时$COMPRUN,我得到了g++: error: &&: No such file or directory.

别名工作正常(所以我原来的问题解决了),但环境变量没有。

为什么运行命令与从环境变量运行命令直接不同?命令行如何解释我的命令以获得“没有这样的文件”错误?

4

2 回答 2

1

出现错误的原因是 shell 没有解释命令行。因此,它&&被视为一个简单的字符串(命令上下文中的文件名),而不是被解释为控制运算符。您必须使用eval $COMPRUN让 shell 实际评估命令字符串。

于 2013-03-05T17:20:34.263 回答
1

使用 shell 函数而不是变量来封装任意代码。

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

参数扩展发生在命令行已被解析之后,因此&&无法识别任何语法结构(如 )。在您的情况下,不存在的文件是“&&”。

于 2013-03-05T17:30:53.073 回答