问题标签 [stty]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
543 浏览

terminal - 是否有任何 stty 选项可以将终端置于原始模式但仍让它生成信号,例如 CTRL+Z

有很多选择stty。我想要的是基于stty raw -echo:我想知道是否可以添加一个选项,使终端驱动程序在看到例如ctrl+时发送信号z,而不是让我的程序处理这个按键。

0 投票
1 回答
222 浏览

linux - 中断'read -s'后隐藏终端输入

在等待来自操作的输入时按 Ctrl-Cread -sp会将操作返回到命令行,但给定的输入被隐藏,就像它仍在运行一样read -s

例子

通常执行如下:

但是如果你在 ENTER PASSWORD 时按 Ctrl-C 你会得到

在您使用 刷新之前,文本或任何其他以下命令不会显示为输入reset

收到 SIGINT 后如何将文本恢复为正常输入?read -p "ENTER PASSWORD: " password出于明显的安全原因,不需要。

0 投票
2 回答
1961 浏览

ubuntu - 设备连接时如何自动设置波特率?

我可以stty -F /dev/ttyUSB0 19200随时设置波特率。但是我想在插入设备时自动设置它。是否有某种配置文件可以放入?

我在 Ubuntu 14.04 系统上执行此操作。

0 投票
0 回答
80 浏览

c - 通过 C 将 stty 大小结果传递给 Erlang 程序

character.c:14:70: 警告:从较小的整数类型 'int' 转换为 'char' [-Wint-to-pointer-cast] sprintf(command, "erl -noshell -s program main %s -s init stop ", (char ) 输出);

当我尝试不使用指针时

我想通过终端窗口的大小stty size并将其传递给我的 Erlang 程序,以便它可以正确显示文本。

我该怎么做呢?

0 投票
3 回答
3505 浏览

gnu-screen - GNU Screen 终端线设置

我想使用 GNU 屏幕来监控这样的串行 USB 端口:

但我需要调整一些终端线路设置。我做了几次尝试,但似乎都没有奏效。例如,要为换行符发送 NL+CR,而不仅仅是 NL,终端行设置为 onlcr。

尝试 1 - 没有任何特殊设置:

尝试 2 - 通过屏幕:

尝试 3 - 通过 ssty:

尝试 4 - 通过两者:

尝试 5 - 以其他顺序:

在所有情况下,如果我运行 stty 来检查终端线路设置,我会得到:

在运行屏幕之前- 请注意 -onlcr 存在:

更改 stty 设置- 请注意 -onlcr 已消失:

运行屏幕后- 注意 -onlcr 又回来了:

就好像 screen 忽略了任何 stty 设置并将它们重置为它自己的默认值。这在我测试过的两台机器上都是一样的;Debain 8.7 和 macOS Sierra 10.12.4

我看过其他人面临类似问题的帖子,但没有一个给出明确的答案。许多人最终推荐了一种替代屏幕的方法,例如 minicom,但现在我很感兴趣。

stty设置,比如onlcr,可以和screen一起使用吗?

0 投票
1 回答
882 浏览

bash - Bash:使用空格键暂停并继续执行

我正在运行在一个多小时内产生大量输出的代码。在执行期间,我使用tee. 然而,仍然发送到我的终端的大量输出有点麻烦,所以我做了一个小函数ShowLastLines,我可以通过管道输出我的输出,它将只显示最后 15 行输出和实时更新。

这是脚本:

在实践中,我像这样使用它:

这按预期工作得很好,但是我想添加一个更多功能,即ShowLastLines当我点击空格键(例如,调查我注意到的一些细节)时,我想暂停输出(在 中,当然不是在原始执行中),并且当我再次按空格键时让它继续(它将赶上执行输出)。

我尝试了几件事,但到目前为止还没有成功。stty我相信可以通过使用(如在此线程中)将标准输入置于非阻塞模式来完成:

但我无法将它与我现有的read.

一个重要的附带说明:我在 AFS 集群上,因此tee在计算完成之前我无法访问日志文件(由 编写),因为不同机器之间的同步是如何实现的(我知道否则会更容易tail -f在日志文件上使用 a )。

Ps:最有用的实现是,当按空格键暂停输出时,可以在输出中向上滚动以显示之前的行。欢迎提出任何建议,但我意识到这可能需要一个完全不同的实现,这可能会增加很多计算开销,所以我很高兴有一个解决方案可以通过空格键简单暂停。

0 投票
1 回答
3413 浏览

c - 使用系统调用后重置(stty raw)

我正在使用以下代码来读取和输出每个击键,而不必每次都按 enter。

在我读完之后,程序会执行另一个系统调用来重置终端行为。

问题是,最后一行没有按照应有的方式重置终端行为。一旦这个程序终止,一切都会变得一团糟。它继续读取输入,一旦按下回车键或 CTRL C 或其他任何东西,它就不会做任何事情。

如何将终端行为重置为最初的行为?

0 投票
1 回答
54 浏览

arm - stty 和 STM32F4-DISCO(fourQ 封装)出错

我最近下载了 FourQlib [1] 的 v3,构建了 FourQlib,并想测试一切是否顺利。

首先,我的系统:Windows 10 (host) with MinGW, ARM Toolchain, MSYS, ... Ubuntu 16.04 LTS (Guest) (gcc, arm toolchain, ...) VirtualBox STM32F429ZI-Disco

源 [1] 包含目录“FourQ_ARM”,编译时必须在终端中启动“monitor.sh”[2] 文件。由于他们(Longa 等人)链接到“ttyUSB0”,我会检查是否在 Ubuntu 中注册了任何设备。由于我的 µC 注册为“stlinkv2_2”,因此我更改了此符号链接“/dev/ttyUSB0 -> /dev/stlinkv2_2”。

如果我运行monitor.sh,开始时会出现错误:stty -F /dev/stlinkv2_2 导致错误“Vorgang nicht zulässig”,意思是“不允许操作”

有人可以解释一下,为什么我会收到这个错误以及如何让这个 shell 脚本工作?

[1] https://github.com/Microsoft/FourQlib

[2] https://github.com/Microsoft/FourQlib/blob/master/FourQ_ARM/tests_Cortex-M4/monitor.sh

0 投票
0 回答
816 浏览

c - 在 C 中强制使用原始串行模式 - linux

不知道如何表达标题,但我想做的是用我的 Linux PC 测试我的微控制器以确保数据正确。经过数小时的搜索,我发现 stty 命令可以更改通过串行端口管理数据的方式,结果发现默认情况下,如果从端口接收到 xon 或 xoff 字符,则不会显示它们。起初我认为我的电脑太慢了,以至于我在 57.6Kbps 的速度下丢失了字符,但事实并非如此。

早在我在 QuickBasic for DOS 中玩串口鼠标的那一天,我可以使用这个命令来启动串口:

所以我现在想做的是在 C 中创建一些简单的东西,让我能够以最原始的模式打开串行端口。我想要它,以便我提供给它的任何数据都未经修改地发送给它。我也想接收未修改的数据。因此,如果控制器决定发送 PC 将识别为特殊控制代码的字符,我仍然希望看到该字符,而不是仅仅因为字符匹配控制代码而让 PC 变得有趣。

我想到的一个想法是为 stty 程序创建一个分支,并使用几乎每个(50+?)添加到程序中的参数,这使得程序堆栈空间的要求有点高。

我想到的另一个想法是使用端口地址本身进行直接 I/O(使用 inb 和 outb),但我不确定内核是否会在数据到达端口之前通过其他任何方式运行这些命令,但我会而是将其用作最后的选择,以防我更换计算机并且串行端口值发生更改(或成为通过 USB 到串行转换器硬件制成的串行端口)。

因此,而不是 inb 和 outb 以及那些变体(如 inw),并且没有在我的程序中指定 50 多个参数来执行 stty,CI 中是否有一个函数可以使用(不需要标准 Linux 发行版中不包含的特殊库)来强制将串行端口设备作为原始设备,以便我可以在其上执行任何 I/O 而无需内核修改或删除数据?

0 投票
1 回答
671 浏览

bash - 停止回显并使用 Bash 中的所有用户输入

目标

直到脚本中的某个子任务完成其工作:

  • 停止回声;
  • 禁用光标;
  • 消耗所有用户输入;
  • 不要阻塞中断(Ctrl+C 等)。

做了什么

现在,使用这个答案,我为此创建了几个函数,它们是:

以下是它们的使用方式:

问题

问题是:当前的“解决方案”不起作用。当我在长时间运行的作业中按下键时,它们会出现在屏幕上,并且按“Enter”会破坏所有输出并伴随光标移动。此外,在“start_interactive”函数调用之后,所有输入都出现在终端屏幕上。

这项任务的正确解决方案是什么?

解决方案

最终的工作解决方案是: