9
$ matlab -nodesktop -nojvm &

如何在刚刚创建的会话上执行 matlab 命令?

换句话说,我希望在后台运行一个 matlab 会话,并在任何给定时间从任意终端执行 matlab 命令和/或脚本,而无需创建新会话。

4

2 回答 2

8

我会建议与carandraug类似的解决方案,只是我更喜欢tmux作为多路复用器。正确传递命令可能有点棘手,因此请创建一个处理细节的 shell 脚本。

假设您matlab在这样的终端中开始:

tmux new -s matlab "matlab -nodesktop -nojvm"

现在一个tmux名为 matlab 的会话正在运行没有 gui 的 matlab。

创建这个 shell 脚本:

MX

#!/bin/bash

if [[ $# -eq 0 ]]; then
  while read; do
    tmux send-keys -t matlab "$REPLY"$'\n'
  done
else
  tmux send-keys -t matlab "$@"$'\n'
fi

在不同的终端中,您现在可以运行引用的 matlab 命令:

mx "A = reshape(1:9, 3, 3)"

甚至通过管道传递命令:

for mat in A B C; do echo "$mat = reshape(1:9, 3, 3)"; done | mx
于 2012-09-06T20:23:49.763 回答
3

一种可能性是启动一个屏幕会话,然后在其上启动 matlab,并从中分离。任何时候你想使用它,只需启动一个终端并重新连接该屏幕会话。

基本上启动屏幕(只需screen在终端输入),然后启动您的 matlab 会话。然后从会话中分离(Ctrl+A然后按D),您将返回终端。您可以关闭窗口没问题,在屏幕上启动的任何进程都将继续运行。每当您想再次获取它(称为重新附加会话)时,只需使用screen -r. 查看手册页以了解所有其他选项。

请注意,一个屏幕会话可以有任意数量的窗口,您也可以同时拥有多个屏幕会话。祝您好运在线上的一些教程,这是一个非常有用的工具,特别是但不仅限于,如果您将很多连接到可能需要运行长时间作业的其他系统。

于 2012-09-06T19:26:18.093 回答