在mac上用MATLAB进行系统调用时,如何模拟终端路径

w8biq8rn  于 2022-11-30  发布在  Matlab
关注(0)|答案(1)|浏览(212)

我尝试在MATLAB中自动化mac终端调用。在我的特定用例中,我使用brew安装了cmake,但在MATLAB中无法识别cmake [~,result] = system('cmake ..');返回zsh:1: command not found: cmake
使用下面的代码,我确信我可以更新路径,以便识别cmake。(Mac,Matlab,bash) Changing the PATH of bash in Matlab for system commands
然而,我想知道是否有一种通用的方法来模仿终端看到的路径。
特别是当我在终端中运行env和在MATLAB中使用[~,result] = system('env');时,路径变量是不同的,我想知道为什么会这样,以及如何确保它们一致。

hc2pp10m

hc2pp10m1#

当您在macOS上从图标启动MATLAB时,您不会运行登录shell启动文件,因此您的大部分配置都不会被加载。也就是说,在~/.zprofile~/.zshrc等中配置的任何内容都不会被MATLAB看到。与其他Unix不同,macOS在您登录时不会启动登录shell。请参阅here以了解登录shell和非登录shell之间的区别。
解决这个问题的一种方法是从终端窗口启动MATLAB,另一种方法是在运行shell命令之前手动加载zsh配置。
一个更干净的解决方案是避免~/.zprofile(为登录shell加载)和~/.zshrc(为交互shell加载),而是将您的配置放在~/.zshenv中(为所有shell加载,包括由MATLAB为system()!启动的shell)。
特别是,自制啤酒添加了一条线

eval "$(/opt/homebrew/bin/brew shellenv)"

将这一行移到~/.zshenv并重新启动MATLAB应该会将Homebrew配置添加到从MATLAB内部启动的shell中。

相关问题