我最近在我的MacOS 10.14.6上安装了Homebew的MacOS。我在.zshrc文件中创建了一个别名:
alias g++="/usr/local/bin/g++-10"为了在终端中自动编译和运行,我创建了一个.sh文件。但是,我注意到在从终端手动调用g++时使用的g++版本如下:
$ 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的内容是:
type g++
g++ --version然后,脚本调用的输出是:
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下面是以下命令的输出:
$ type g++
g++ is an alias for /usr/local/bin/g++-10为什么这两个版本不同?
发布于 2020-08-03 07:04:13
首先,除非显式启用,否则脚本中忽略别名定义。您可以通过在脚本中执行以下操作来打开它
setopt aliases但是不要忘记,这只会影响在之后定义的别名,而不是以前。
其次,除非显式启用,否则zsh脚本不会处理.zshrc。从zsh手册页:
(如果外壳是交互式),则从/etc/zshrc读取命令,然后从ZDOTDIR/.zshrc读取命令。
您可以通过使用-i选项运行脚本来强制交互:
zsh -i your_script.zsh但是,如果您希望在zsh脚本中执行某个g++版本,通常的解决方案是调整路径,以便zsh能够找到正确的版本。例如:
PATH=/your/path/to/g++:$PATH zsh your_script.zsh如果您总是希望使用这个g++版本,您当然会相应地在您的.zshrc中设置路径。因为命令shell是交互式的,所以.zshrc将被处理,而且因为PATH是一个环境变量,所以您的脚本将仔细阅读这个路径,您需要做任何特殊的事情。
https://stackoverflow.com/questions/63217328
复制相似问题