bash - 从 Matlab 中运行 unix 命令时忽略用户输入

标签 bash matlab user-input

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

unix('ls test')

我经常不小心按下某个键(例如 Enter 或箭头键),例如:当我从待机状态唤醒显示器时。理论上这不会干扰 unix 命令。但不幸的是,Matlab 将接受此输入并将其直接转发到命令的执行中。上面的命令就变成这样:

unix('ls te^[0Ast')

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

显然,这会产生错误。

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

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

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

我能否以某种方式将用户输入传送到其他地方并将 Matlab 与任何类型的输入隔离?

最佳答案

这不是一个非常具体的问题,但让我尝试一下。我可以看到几个选项。我假设 ma​​tlab 是文本终端应用程序。

  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) 命令中运行 ma​​tlab,断开屏幕连接或切换到不同的窗口。 Screen 是一个允许您创建虚拟终端的程序(类似于 GUI 中的虚拟桌面)。如果您还没有听说过 screen,我建议您看一些教程。谷歌搜索gnu screen教程似乎提供了很多。

关于bash - 从 Matlab 中运行 unix 命令时忽略用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242254/

相关文章:

命令行参数 C

user-input - 用户名和空格

bash - 如何在 bash shell 中设置光标颜色

matlab - 如何在 Matlab 中将 svmtrain() 与自定义内核一起使用?

bash - Cygwin:使用包含 Windows 路径的路径变量(其中有一个空格)

C fwrite 输出在 Matlab 中显示不正确

math - 在MATLAB中使用Jm+1=2mj(m) -j(m-1)公式计算bessel函数

c# - 使用 C# 防止屏幕休眠

bash - 将文件名读入数组

bash - 管道 docker run 容器 ID 到 docker exec