首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从zsh脚本调用的g++版本和从终端手动调用的版本不同

从zsh脚本调用的g++版本和从终端手动调用的版本不同
EN

Stack Overflow用户
提问于 2020-08-02 14:44:01
回答 1查看 393关注 0票数 0

我最近在我的MacOS 10.14.6上安装了Homebew的MacOS。我在.zshrc文件中创建了一个别名:

代码语言:javascript
复制
alias g++="/usr/local/bin/g++-10"

为了在终端中自动编译和运行,我创建了一个.sh文件。但是,我注意到在从终端手动调用g++时使用的g++版本如下:

代码语言:javascript
复制
$ g++ --version
g++-10 (Homebrew GCC 10.2.0) 10.2.0
Copyright (C) 2020 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

它与从g++脚本调用.sh的调用不一样。脚本displayg++Version.sh的内容是:

代码语言:javascript
复制
type g++
g++ --version

然后,脚本调用的输出是:

代码语言:javascript
复制
g++ is /usr/bin/g++
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.14.sdk/usr/include/c++/4.2.1
Apple LLVM version 10.0.1 (clang-1001.0.46.4)
Target: x86_64-apple-darwin18.7.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

下面是以下命令的输出:

代码语言:javascript
复制
$ type g++
g++ is an alias for /usr/local/bin/g++-10

为什么这两个版本不同?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-03 07:04:13

首先,除非显式启用,否则脚本中忽略别名定义。您可以通过在脚本中执行以下操作来打开它

代码语言:javascript
复制
setopt aliases

但是不要忘记,这只会影响在之后定义的别名,而不是以前。

其次,除非显式启用,否则zsh脚本不会处理.zshrc。从zsh手册页:

(如果外壳是交互式),则从/etc/zshrc读取命令,然后从ZDOTDIR/.zshrc读取命令。

您可以通过使用-i选项运行脚本来强制交互:

代码语言:javascript
复制
zsh -i your_script.zsh

但是,如果您希望在zsh脚本中执行某个g++版本,通常的解决方案是调整路径,以便zsh能够找到正确的版本。例如:

代码语言:javascript
复制
PATH=/your/path/to/g++:$PATH zsh your_script.zsh

如果您总是希望使用这个g++版本,您当然会相应地在您的.zshrc中设置路径。因为命令shell是交互式的,所以.zshrc将被处理,而且因为PATH是一个环境变量,所以您的脚本将仔细阅读这个路径,您需要做任何特殊的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63217328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档