我有一个 Matlab 程序,它经常运行不同的 UNIX 命令。对于这个问题,我们假设我正在做的是:
unix('ls test')
我经常不小心按下某个键(例如 Enter 或箭头键),例如:当我从待机状态唤醒显示器时。理论上这不会干扰 unix 命令。但不幸的是,Matlab 将接受此输入并将其直接转发到命令的执行中。上面的命令就变成这样:
unix('ls te^[0Ast')
(旁注:^[0A 是换行符的十六进制表示)
显然,这会产生错误。
有人知道如何解决这个问题吗?
我在想,可能有一种方法可以用我的脚本启动 Matlab,而不会从 unix shell 中转发任何用户输入。
#!/bin/bash
matlab -nodisplay -nosplash -r "runMyScript();"
我能否以某种方式将用户输入传送到其他地方并将 Matlab 与任何类型的输入隔离?
最佳答案
这不是一个非常具体的问题,但让我尝试一下。我可以看到几个选项。我假设 matlab 是文本终端应用程序。
有 nohup(1) 命令。由于您使用 Linux,因此很可能存在非 posix 版本,如果它的手册页中显示:如果标准输入是终端,则从/dev/null 重定向它。
$ nohup matlab -nodisplay -nosplash -r "runMyScript();"
您可以自己重定向/dev/null
$ matlab -nodisplay -nosplash -r "runMyScript();" < /dev/null
但是 matlab 实际上可以重新打开它的标准输入,忽略您通过管道输入的内容(例如 ssh 就是这样做的,您不能在某处使用echo password | ssh。
如果您在图形环境中运行,您可能需要最小化窗口,以便它不接收任何输入。可能不是你的情况,你会自己弄清楚:)
您可以尝试通过按“Ctrl”、类似的按键或鼠标来唤醒
您可以在 screen(1) 命令中运行 matlab,断开屏幕连接或切换到不同的窗口。 Screen 是一个允许您创建虚拟终端的程序(类似于 GUI 中的虚拟桌面)。如果您还没有听说过 screen,我建议您看一些教程。谷歌搜索gnu screen教程似乎提供了很多。
关于bash - 从 Matlab 中运行 unix 命令时忽略用户输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242254/