在后台BASH中运行Matlab

4

我想在后台以以下方式在BASH中运行Matlab脚本:

echo "matlab -nojvm -r p=setpath(/mydirectory/);addpath(p);myscript;exit" |sh &

the error I get is:

sh: line 1: syntax error near unexpected token '('
sh: line 1: 'matlab -nojvm -r p=setpath(/mydirectory/);addpath(p);myscript;exit' 

我正在循环运行它,所以这个操作需要执行多次。
  1. 错误是否与管道有关?每当我在后台运行Matlab时,它都会挂起,但对于简单命令或上传GUI,管道工作正常。

  2. 有没有办法从BASH设置Matlab的路径?

  3. 我尝试在没有GUI或弹出任何内容的情况下运行Matlab,当我用 -nodesktop -nojvm 运行时,它不会打开GUI,但仍会进入Matlab并在命令行中等待,还有其他语法可以使用使屏幕上不显示任何东西吗?

需要您的帮助,谢谢。
2个回答

4

试试这个:

echo 'matlab -nojvm -r "p=setpath(/mydirectory/);addpath(p);myscript;exit"' |sh &

外层单引号保护内部双引号,这样sh就看不到括号。

你不能直接这样做有什么原因吗?

matlab -nojvm -r "p=setpath(/mydirectory/);addpath(p);myscript;exit" &

也许是:
matlab -nojvm -r "p=setpath(/mydirectory/);addpath(p);myscript;exit" </dev/null &

嗨,Dennis,每当我输入命令而没有使用管道时,它会自动挂起,我真的不知道该怎么解决。谢谢你的帮助。 - jarhead
@jarhead:尝试使用重定向运行最后一个示例。 - Dennis Williamson
它似乎可以工作,但我仍然需要运行一些测试来确保,谢谢。顺便问一下,它们之间有什么区别,为什么一个比另一个更好? - jarhead
使用重定向可以避免生成子shell,所以少了一个进程。并且引用方式更简单了。这是否也解决了您问题中的第三点? - Dennis Williamson
嗨Dennis,当我使用重定向运行命令时,命令执行后立即完成(此脚本需要至少运行一个小时)。现在当我运行它时,我什么也得不到,当我执行ps或top命令时,没有任何进程,你有什么想法吗? - jarhead
@jarhead:抱歉,没有更多的想法了。将版本输入到 sh 中时,使用额外引号是否有效? - Dennis Williamson

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接