Is it possible to programmatically check whether MATLAB has been started with the "-sd" option?

5 ビュー (過去 30 日間)
I have a program that needs to behave differently depending on whether MATLAB was started with the "-sd" option (sets initial working folder) or not. However, I cannot determine a way to programmatically check this.
  4 件のコメント
Andre Zeug
Andre Zeug 2022 年 9 月 18 日
Sorry for being inprecise. I want to find out if matlab was started with
matlab -nosplash -sd $matlabWorkingPath
See Matlab start options e.g. for Win or Linux.
Depending on that, I want to go to the last working dir or not. So far, my startup.m overrides the -sd request.
%% go to last working dir
if ispref('StartupDirectory','LastWorkingDirectory') % && isempty(matlabStartOption('-sd')
lwd = getpref('StartupDirectory','LastWorkingDirectory');
disp('Sorry, but I could not go to your last working directory:')
clear lwd;
So, one solution would be to identify if Matlab was started with the -sd option.
dpb 2022 年 9 月 18 日
TMW hasn't provided a link to the command line -- I see a couple alternatives...(I've not tried either, just possible approaches that come to mind at the moment).
  1. Use a batch file containing the startup command and have it set an environment variable that startup.m can check, or
  2. Write a mex command that returns the command line and use the -r option to dispatch it. I don't know that this will work or not...



Jan 2022 年 9 月 18 日
PID = feature('getpid');
[status, out] = system(sprintf('ps -p %d -o args', PID))
status = 0
out =
'COMMAND /MATLAB/bin/glnxa64/mvm/MATLAB -r setupcomputeserver -softwareopengl -desktop -appendlogfile /var/mlsedu/log/matlab.log '
Parsing the char vector out is not trival: E.g. he name of the logfile might contain the substring ' -sd '. Will masking substrings included in double quotes avoid such troubles?
Alternatively you can avoid -sd but use a dedicated function instead:
matlab -r "cd('/your/folder')"
  1 件のコメント
Andre Zeug
Andre Zeug 2022 年 9 月 20 日
PID = feature('getpid');
[status, out] = system(sprintf('ps -p %d -o args', PID))
works excellent under Linux, but the windows equivalent
PID = feature('getpid');
[status, out] = system(sprintf('tasklist /FI "PID eq %d"', PID))
does not provide arguments.
matlab -r "cd('/your/folder')"
is an excellent Workaround.


その他の回答 (0 件)




Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by