2

我有一个 Matlab 程序,它经常运行不同的 unix 命令。对于这个问题,让我们假设我正在做的是:

unix('ls test')

当我将显示器从待机状态唤醒时,我经常会意外按下一个键(如回车键或箭头键)fe。从理论上讲,这不应该干扰 unix 命令。虽然不幸的是,Matlab 会接受这个输入并将其转发到命令的执行中。上面的命令就变成了这样:

unix('ls te^[0Ast')

(旁注:^[0A 是换行符的十六进制表示)

显然,这会产生错误。

有谁知道如何解决这个问题?

我在想可能有一种方法可以用我的脚本启动 Matlab,这种方法不会从 unix shell 中转发任何用户输入。

#!/bin/bash
matlab -nodisplay -nosplash -r "runMyScript();"

我可以以某种方式将用户输入管道传输到其他地方并将 Matlab 与任何类型的输入隔离开来吗?

4

1 回答 1

2

这不是很具体的问题,但让我试试。我可以看到几个选项。我假设matlab是文本终端应用程序。

  1. 有 nohup(1) 命令。由于您使用 linux,因此如果它的手册页中显示有非 posix 版本:如果标准输入是终端,则从 /dev/null 重定向它。

    $ nohup matlab -nodisplay -nosplash -r "runMyScript();"
    
  2. 您可以自己重定向 /dev/null

    $ matlab -nodisplay -nosplash -r "runMyScript();" < /dev/null
    

    但是matlab实际上可以重新打开它的标准输入,而忽略您输入的内容(例如 ssh 这样做,您不能在某处使用 echo password | ssh

  3. 如果您在图形环境中运行,您可能希望最小化窗口,使其不接收任何输入。可能不是你的情况,你会自己弄清楚:)

  4. 您可以尝试通过按“Ctrl”、类似的键或鼠标来唤醒

  5. 您可以在 screen(1) 命令中运行matlab断开与屏幕的连接或切换到不同的窗口。Screen 是一个允许您创建虚拟终端的程序(类似于 GUI 中的虚拟桌面)。如果你还没有听说过screen,我建议你看一些教程。谷歌搜索gnu 屏幕教程似乎提供了很多。

于 2013-05-06T13:33:51.257 回答