我正在尝试使用g ++编译和执行程序,然后我得到了命令:
g++ -o example example.cpp && ./example
它运行正常。我试图设置一个环境变量来节省我的时间:
COMPRUN="g++ -o example example.cpp && ./example"
(echo $COMPRUN
告诉我作业没问题)。但是当我尝试使用$COMPRUN
执行它时,我得到g++: error: &&: No such file or directory
。
别名工作正常(所以我的原始问题已解决),但环境变量却没有。
为什么运行命令与从环境变量运行命令有什么不同?命令行如何解释我的命令以获得“没有这样的文件”错误?
答案 0 :(得分:1)
您收到错误的原因是因为shell 不解释命令行。因为&&
被视为一个简单的字符串(命令上下文中的文件名),而不是被解释为控件操作符。您必须使用eval $COMPRUN
让shell实际评估命令字符串。
答案 1 :(得分:1)
使用shell函数而不是变量来封装任意代码。
$ comprun () {
g++ -o "$1" "$1".cpp && ./"$1"
}
$ comprun example
在解析命令行之后发生参数扩展,因此无法识别任何语法结构(如&&
)。在您的情况下,不存在的文件是“&&”。