Perplexing output from the system() command
12 次查看(过去 30 天)
显示 更早的评论
I am running R2106b on a Macbook Pro OS X Yosemite.
In a Terminal window (using bash shell), if I type
which which
I get the expected output
/usr/bin/which
and similarly
which psql
yields
/usr/local/bin/psql
All is well and good so far. But if I issue these same command from within MATLAB, using the system() command, I get output that perplexes me. As expected, when I type
[status cmdout] = system('which which')
I get
status =
0
cmdout =
'/usr/bin/which
'
But from
[status cmdout] = system('which psql')
I get
status =
1
cmdout =
0×0 empty char array
Finally, if I point directly to the known directory (which in my real application I would not know) ...
[status cmdout] = system('which /usr/local/bin/psql')
then the command is found
status =
0
cmdout =
'/usr/local/bin/psql
'
Does anyone have some insight into what is happening here? I am not a Unix expert by any means. But the whole thing seems to be a bit of a shell game. ;-)
(I can add the why I am doing this if needed, but I won't burden folks just yet.)
3 个评论
Walter Roberson
2017-6-23
The causes are described below: when you start MATLAB from the icon, that is not a login shell so your shell setup files are not run and so your PATH environment variable does not include everything you might be expecting.
采纳的回答
Walter Roberson
2017-1-25
psql is not on your PATH environment variable inside of MATLAB. When you enter the terminal then that would be a login shell and your bash profile would be executed, but when you start MATLAB from an icon then that is not a login shell and your bash profile would not be executed.
2 个评论
Walter Roberson
2017-9-10
/etc/profile and ~/.bashrc and ~/.bash_profile and ~/.bash_login and ~/.profile are only executed for interactive shells.
/etc/bashrc (Red Hat) or /etc/bash.bashrc (Ubuntu) are executed for non-interactive shells.
更多回答(1 个)
Nikunj Kothari
2017-1-25
Are you getting the same output if instead of using system(), you use the exclamation point? The following documentation link elaborates on how to properly run external commands and scripts:
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Introduction to Installation and Licensing 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!