【问题标题】:Running a command directly vs. from an environment variable直接运行命令与从环境变量运行
【发布时间】:2013-02-20 04:59:02
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

    标签: bash command-line environment-variables


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2021-07-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-20
        • 2013-08-08
        • 1970-01-01
        • 1970-01-01
        • 2013-12-17
        • 1970-01-01
        相关资源
        最近更新 更多