我有一些独立的 Matlab 程序,出于不同的原因需要访问它们所在目录中的文件(启动另一个程序或在那里读取一些 XML 文件)。我有以下适用于 Windows 的功能:
function execDir = get_deployed_exec_dir()
% Returns the directory of the currently running executable, if deployed,
% an empty string if not deployed (or if unable to determine the directory)
execDir = '';
if isdeployed
[status, execDir] = system('path');
if status == 0
execDir = char(regexpi(execDir, 'Path=(.*?);', 'tokens', 'once'));
end
end
为了让它在 Linux 和 Mac 上工作,我想我可以替换system('path')
并system('echo $PATH')
更改正则表达式以适应 Unix 语法,但与 Windows 不同,当前运行的可执行文件的目录似乎不会自动添加到路径的前面多变的。Matlab中有没有办法获取当前运行的可执行文件的目录(我知道有脚本,但部署时似乎不能正常工作),或者我应该在运行之前编辑设置MCR的脚本应用程序设置我的代码可以使用system
命令读取的变量?
具体而言,用户计算机上的某处是文件夹EXECFOLDER
,其结构:
EXECFOLDER
| exec1
| exec2
| run_exec1.sh
| run_exec2.sh
| data.xml
我想弄清楚EXECFOLDER
无论用户在哪里运行run_exec1.sh
(设置 MCR 和调用的脚本exec1
)的路径,以便exec1
可以读取data.xml
和执行exec2
.
尝试总结:
system('echo $PATH')
: 可执行目录不在 Mac 和 Linux 的路径上matlabroot
: MCR 的位置pwd
: 用户的当前文件夹,当它以完整路径运行时,它可能与可执行文件的位置不同dbstack
: 未打包的 .m 文件的位置which
: 未打包的 .m 文件的位置fileattrib
: 未打包的 .m 文件的位置