直接从环境变量运行命令

时间:2013-03-05 17:04:53

标签: bash command-line environment-variables

我正在尝试使用g ++编译和执行程序,然后我得到了命令:

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

您收到错误的原因是因为shell 解释命令行。因为&&被视为一个简单的字符串(命令上下文中的文件名),而不是被解释为控件操作符。您必须使用eval $COMPRUN让shell实际评估命令字符串。

答案 1 :(得分:1)

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

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

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