さまざまな理由で、配置されているディレクトリ内のファイルにアクセスする必要があるスタンドアロンの 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 で動作させるには、Unix 構文に合わせて正規表現を置き換えsystem('path')
てsystem('echo $PATH')
変更できると考えましたが、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 ファイルの場所