У Matlab есть файл matlabrc?

Сегодня наткнулся на эту тему:

http://www.mathworks.com/matlabcentral/newsreader/view_thread/112560

Вопрос в том, как заставить Matlab читать ваш файл startup.m независимо от того, где вы начинаете сеанс Matlab.

Одним из предложенных решений было:

Одним из решений было бы попросить системного администратора добавить несколько строк в «matlabrc.m», которые добавляют некоторую предопределенную папку в домашнем каталоге пользователя к пути MATLAB (скажем, ~/.matlabstart). Тогда у каждого пользователя может быть свой собственный файл «startup.m» внутри этой папки.

Что я сделал в своей системе (OS X), так это добавил файл startup.m в:

/Applications/MATLAB_R2011a.app/toolbox/local/

В этот файл startup.m я добавил:

if exist([getenv('HOME') '/.matlabrc/startup.m'])
    run([getenv('HOME') '/.matlabrc/startup.m']);
end

Таким образом, у пользователей есть возможность создать скрытую папку ~/.matlabrc и поместить в нее файл startup.m. В этом файле запуска они могут указать Matlab, что выполнять всякий раз, когда они запускают Matlab, независимо от каталога, в котором они его запустили. Пример того, что я добавил в свой личный startup.m файл:

addpath(genpath('/Users/jmlopez/matlabcode/'))

Теперь я могу добавить столько папок в этот каталог, и все они будут добавляться в путь каждый раз, когда я запускаю Matlab автоматически, без необходимости изменять путь.

Вопрос в том, предоставил ли Matlab уже специальный файл, подобный тому, который я создал, или я просто прошел через все эти проблемы, чтобы выполнить то, что хотел? Если ответ - второй вариант, который я дал, то почему Matlab не предоставляет этого? Это такая боль в заднице - добавлять каталоги в путь Matlab, когда у вас нет прав администратора, и я не хочу переносить свой файл startup.m в каждый каталог, в который я захожу. Может кто-нибудь пролить свет на это, пожалуйста?


person jmlopez    schedule 16.06.2012    source источник
comment
Если вы собираетесь использовать слова, которые некоторые могут счесть оскорбительными, используйте их. Если заботитесь о том, чтобы не обидеть чувствительных, не притворяйтесь, что $$ скрывает вашу задницу. Я отредактировал ваш вопрос, чтобы дать вам смелость в своих убеждениях.   -  person High Performance Mark    schedule 16.06.2012


Ответы (1)


Вы можете сохранить файл pathdef (в котором хранятся все добавленные вами пути) в пользовательский каталог. Однако проблема заключается в том, что при запуске Matlab автоматически не знает, какой пользовательский каталог вы использовали в предыдущем сеансе.

Но именно здесь появляется переменная среды MATLABPATH. Потому что это позволяет самостоятельно установить начальный путь Matlab. В Linux это просто делается путем установки этой переменной среды MATLABPATH перед запуском Matlab (из терминала/в вашем .bashrc/...)

export MATLABPATH=$HOME/.matlab

Таким образом, вы можете позволить всем пользователям иметь свой собственный файл pathdef, что решает проблему необходимости добавлять их вручную при запуске.

РЕДАКТИРОВАТЬ

Я проверил, работает ли добавление startup.m в этот каталог MATLABPATH, то есть: запускает ли Matlab этот файл запуска? ... и это так. Я думаю, что это не работает для вас, потому что есть другой файл startup.m в каком-то другом каталоге (с более высоким приоритетом) (вероятно, matlabroot), так что он имеет приоритет. Мой единственный файл запуска находится в MATLABPATH, так что есть только один выбор.

РЕДАКТИРОВАТЬ2

Нет, я добавил автозагрузку в каталог matlabroot, но мой собственный файл автозагрузки в .matlab все еще запускается. Вы уверены, что правильно установили MATLABPATH перед запуском Matlab?

person Gunther Struyf    schedule 16.06.2012
comment
Я видел эту папку, но нигде не мог найти, где написано, что именно здесь вы можете сохранить файл pathdef. В любом случае, я бы не стал возиться с файлом pathdef.m, так как это потребовало бы от меня явного указания путей. У меня просто есть файл startup.m с командами addpath(genpath('path/to/directory')). Таким образом, если я изменю структуру каталога, мне не придется беспокоиться о добавлении всех подкаталогов в путь. Могу ли я просто поместить файл startup.m в $HOME/.matlab? Я собираюсь узнать. - person jmlopez; 16.06.2012
comment
Это не сработало. Я знал о MATLABPATH из документов. Но это будет работать только в Mac/Linux, и там не упоминается, что я могу поместить туда свой файл pathdef. В любом случае, на данный момент единственный способ, который я вижу возможным, — это добавить администратору это выражение if, чтобы пользователь мог определить свой startup.m и поместить туда все, что ему хочется. Я попытался заставить его отображать «Привет, jmlopez, ты тупой, потому что не знаешь обо мне» в файле startup.m внутри $HOME/.matlab, но, к сожалению, это не отображалось. - person jmlopez; 16.06.2012
comment
Я проверил то же самое, и это работает для меня. посмотри мое редактирование ^^ - person Gunther Struyf; 17.06.2012
comment
Таким образом, кажется, что Matlab выполняет каждый файл startup.m, который находится в пути, при запуске. Правильно? Да, так и написано здесь я добавил $HOME/.matlab к MATLABPATH как вы сказали, так что теперь, когда у меня есть файл startup.m, он его выполняет. Это хорошо работает, :). Теперь последний вопрос: как это применимо к машине с Windows? Есть ли переменная среды, которую мы можем изменить в Windows? В любом случае, я приму ваш ответ, потому что вы развеяли мое замешательство. - person jmlopez; 17.06.2012
comment
он выполняет только первый встречный на своем пути поиска (как и любой другой скрипт, который вы когда-либо пытались запустить с помощью Matlab)!! Для Windows здесь объясняется, что вы можно сделать это, просто создав ярлык для Matlab. Каталог, в котором находится ярлык, будет MATLABPATH. - person Gunther Struyf; 17.06.2012
comment
Вы действительно правы. Если я создам файл startup.m в папке и запущу оттуда Matlab, то файл startup.m в моем $HOME/.matlab не будет выполнен. Понятно. Удачи пользователям Windows. - person jmlopez; 17.06.2012