问题标签 [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 投票
0 回答
215 浏览

macos - stty --help 在 macOS 终端上返回非法选项

我正在尝试学习stty串口通信。但是每当我运行一些命令时,包括stty --help它都会返回:

stty: 非法选项 -- --help

用法:stty [-a|-e|-g] [-f 文件] [选项]

我也试过man stty | grep help没有返回结果,谷歌也没有多大帮助。我能想到的有两种可能:

  • macOS 的 stty 与 Linux 上的不同。macOS 的 stty 似乎来自 BSD。如果可行,我会给你版本stty --version
  • 我的环境设置有问题bash_profile/bashrc

PS1。我在这里而不是apple.stackexchange.com询问,因为我在那边找不到stty标签。

PS2。在 bash IRC 频道上,有人告诉我:

--help 是 GNUism,这就是 OSX 的 stty 无法识别的原因

然后

有一部分选项和操作数适用于这两种实现。你可以在这里看到那些

0 投票
1 回答
40 浏览

bash - 在mac上捕获光标终端位置的Shell脚本会产生额外的字符

我使用https://askubuntu.com/questions/366103/saving-more-corsor-positions-with-tput-in-bash-terminal中的答案作为 shell 脚本,它适用于提取当前位置终端。

但是,在 Mac 机器上,它会产生额外-en的一些新行和空格,如下所示。

我怎么能避免输出额外的-en和新的行和额外的空格

0 投票
0 回答
100 浏览

c - 程序不专门拦截 SIGQUIT 吗?

这个程序似乎无法拦截SIGQUIT信号虽然它可以拦截SIGINT

我正在运行 ubuntu 20 并且运行stty -a命令给出了第一行输出,我猜这意味着 SIGQUIT 已正确映射到^D但按下它似乎什么也没做。我也尝试使用^\因为我在quit=^\sttyeof=^D说的那样感到困惑,所以如果有人可以解开两人之间的这个误会。

0 投票
1 回答
209 浏览

linux - 将屏幕会话配置为与 xterm 终端完全相同

我希望能够通过 screenrc 或在会话中配置屏幕会话,使其行为类似于 xterm 终端。目前我有一个 ac# 应用程序,它使用 ssh.net 库从 Windows 机器 ssh 到 Linux 机器,我在该机器上附加到屏幕会话并发送命令并接收回复。如果我附加到屏幕会话与我未附加到屏幕会话时相比,我会看到同一命令的两种不同类型和响应。为了演示这个问题,我将使用 putty 终端复制该问题并记录数据。

  1. 从 Windows 打开一个腻子终端
  2. 更改 Session->Logging 设置并选择 SSH Packets,同时浏览到保存 putty.log 文件的位置
  3. 设置您的 IP 地址并连接到 Linux 机器
  4. 登录后,发出以下命令 printf "abc\6\n",该字符串包含一个 ack 字符
  5. 响应将打印 abc 当然它不会显示 \6 因为它不是可打印字符
  6. 打开 putty.log 文件,您将看到响应数据包数据包含 \6,这是正确的行为。
  7. 现在通过发出以下命令创建会话:screen -dmS test
  8. 通过发出以下命令附加到会话:screen -Rr test
  9. 再次发出以下命令 printf "abc\6\n"
  10. abc 将按预期打印,但是如果您查看 putty.log 中的响应数据包数据,它将不再具有 \6 字符
  11. 我可以通过管道这样的命令来解决这个问题 printf "abc\6\n" | cat -v 将 \6 转换为可打印形式并在屏幕上显示 ^F,我宁愿在我的数据包数据中接收 \6,这不是一个理想的解决方案,但至少它为我的问题提供了一个解决方案。

以下是我无法解决的更严重的问题。为了演示,请执行以下操作:

  1. 从 Windows 打开一个腻子终端
  2. 更改 Session->Logging 设置并选择 SSH Packets 并浏览到保存 putty.log 文件的位置
  3. 设置您的 IP 地址并连接到 Linux 机器
  4. 登录后,通过发出以下命令更改 stty 设置(告诉终端不要用回车替换新行):stty -onlcr
  5. 然后发出命令 ls -al,
  6. putty.log 文件将包含没有额外字符的正确数据集。
  7. 现在通过发出以下命令创建会话:screen -dmS test
  8. 通过发出以下命令附加到会话:screen -Rr test
  9. 再次发出以下命令 stty -onlcr
  10. 再次发出 ls -al
  11. 如果您查看 putty.log 中的响应数据包数据,您会看到在收到一定数量的数据包后,响应将在每个响应前面包含额外的字符。额外字符采用以下格式 [13C. [ 和 C 之间的数字不同。

我想让我的响应与标准 xterm 终端的行为方式相同,为什么会有差异,是否有办法配置屏幕以获得与 xterm 类型的终端一致的响应。

0 投票
1 回答
379 浏览

resize - 如何在 tmux send-keys 命令中使用内部变量?

有什么办法可以让我做类似的事情bind-key b send-keys "stty cols #{pane_width} rows #{pane_height}"

  1. 我使用 TMUX。
  2. 我经常需要使用 ssh 登录到没有resize命令的 CentOS 服务器。
  3. 我无法在这些服务器中安装命令。
  4. 当我调整 tmux 窗格或终端窗口的大小时,服务器的 stty 无法自动调整大小。

我现在正在使用一种复杂的方法来实现这一点。

我在我的,中写了一个display表扬。.tmux.confbind-key b display -p "stty cols #{pane_width} rows #{pane_height}"

然后我可以将其复制display-message并粘贴到 ssh-server 的命令行中。

0 投票
1 回答
59 浏览

terminal - 为什么`stty cols 40`在两个shell bash和xonsh中有不同的效果

在 Linux/macOS 上sttyxonsh shell 中使用时出现奇怪的行为。(命令似乎不遵守 xonsh 下定义的列,但它们在 bash 下这样做。)

为了更好地理解这种情况,我编写了一个小 C 程序,它为 3 个标准流调用ioctl ,打印出宽度。TIOCGWINSZstdinstdoutstderr

在执行任何stty命令之前,我得到以下 ioctl 宽度的结果:

重击 呸呸呸
stdin=80, stdout=80, stderr=80 stdin=80, stdout=80, stderr=80

到目前为止,一切都很好。这意味着我的终端是 80 列宽。

现在我在每个 shell 中发出stty cols 40,运行我的小程序并得到这些结果:

重击 呸呸呸
stdin=40, stdout=40, stderr=40 stdin=40, stdout=80, stderr=80

多么奇怪,在 xonsh 下,文件描述符 stdout 和 stderr 报告的宽度为 80(!),而在 bash 下,所有描述符都按预期的宽度为 40。

这揭示各种命令(例如wget)不服从stty colxonsh 下的调用这一事实。

但为什么会这样呢?我怎样才能发出一个stty-style 命令,在 xonsh 下将所有标准流的宽度设置为 40?

0 投票
1 回答
223 浏览

bash - 如何设置 stty -echo 并从 /dev/stdin 读取

我正在尝试编写一个从标准输入读取并从 tty 接收用户输入的程序。我想禁用用户输入的呈现,因为它与我的菜单系统混淆,并且如果我重绘以删除它会导致闪烁。stty -echo但是,如果脚本从标准输入接收输入,我似乎无法使用。

这是脚本的简化示例:

陷阱输入

你好.txt

running$ ./trapinput将在启动时回显“Is tty”,在被杀死时会回显“Exit tty”,同时运行程序的其余部分,正如我所期望的那样。它还可以防止直接显示用户输入,从而允许我将其打印在屏幕上的正确位置。

但是,如果我运行$ echo "test" | ./trapinput或者$ ./trapinput < hello.txt它会回显“不是 tty”并且stty -echo未设置导致用户输入显示在我不想要的位置。

如何禁用用户输入的呈现但保留输入文本/使用文件重定向的能力?

0 投票
1 回答
633 浏览

linux - linux + minicom + FT232RL USB-to-UART 适配器发送回车(CR)而不是换行(LF)

你好,这个美好的社区。

我使用带有 MX Linux 作为操作系统的计算机。我想使用串行/UART 控制台访问设备(具体来说,该设备是由 74 系列 IC 制成的最小计算机。请参阅https://github.com/slu4coder/Minimal-UART-CPU-FLASH-Edition)。为了从计算机连接到设备,我在硬件上使用带有(正版)FTDI FT232RL 芯片的 USB 到 UART 转换器。软件方面,我使用 minicom。

它通常有效,但我遇到了一个非常具体的问题:

该设备需要换行信号 (LF) 作为换行信号(它在其 PCB 丝印上这样说)。我无法让 linux+minicom 在 RETURN 或 ENTER 上发送 LF。它将发送一个回车符 (CR)。

如果我通过 USB 到 UART 转换器从我的计算机连接到设备并在我的计算机上启动 minicom,它将向我显示设备串行控制台 - 到目前为止,一切都很好。

但是如果我在 minicom 中输入设备命令并按 RETURN 或 ENTER,设备将不会处理它们。

但是,如果我在我的命令之后使用 CTRL+J 而不是 RETURN 或 ENTER,它会给出一个 LF,它可以正常工作。同样,如果我不使用标准输入/键盘 + minicom,它也可以工作,而是从 bash 发送命令,如下所示:

echo foo > /dev/ttyUSB0

我试图用

但无济于事。

我相信这原则上是正确的命令,但我也尝试了其他命令,只是为了 100% 确定,比如:

但他们也没有帮助。

我还尝试使用 minicom 设置菜单中的“添加换行符”(A)选项让 minicom 本身在 RETURN 或 ENTER 上发送 LF 而不是 CR。这也没有帮助。

你对如何解决这个问题有什么建议吗?这真的不是一个关键问题,因为我总是可以使用 CTRL+J 而不是 RETURN 或 ENTER,但是随着时间的推移会变得有点不方便。

谢谢!

(如果我对问题的描述不是很好,很抱歉 - 业余爱好者和第一次在这里发帖。如果您需要更多信息或图片,请告诉我。)

0 投票
1 回答
70 浏览

bash - 陷阱 "stty echo" INT 与 read -s 一起使用时无效

鉴于此 bash 脚本:

我希望启用 echo 选项,但按下后ctrlc它仍然被禁用,即使我已经运行stty echo (正如您在reset函数的输出中看到的那样)。

终端图片

0 投票
0 回答
42 浏览

ubuntu - 写入串行端口时缺少字符

我正在尝试编写一个 shell 脚本来测试设备的串行端口

在 Ubuntu 上,我写道:

回声“abcdefghijklmnopqrstuvwxyz1234567890”>/dev/ttyUSB0

在目标上,我已经输入了该行:

猫 /dev/ser1

目标显示:

bcdefghijklmnoprstuvwxyz123456890(缺少 aq7)

这是系统的,我尝试了 2 个不同模型的目标,结果是相同的:“a”、“q”和“7”总是缺失。所以我相信问题出在Ubuntu方面。

然后,如果我从 Ubuntu 发送:

回声 -e "\n\n\n"

然后下次“a”和“q”回来但不是“7”

另一种方式(目标发送到 Ubuntu)传输是完美的。没有损失。

在 Ubuntu 端设置:

stty -F /dev/ttyUSB0 -a

速度 115200 波特;第 0 行;第 0 列;线 = 0; 内部 = ^C; 退出 = ^; 擦除 = ^?; 杀死 = ^U; eof = ^D; eol = ; eol2 = ; 开关 = ; 开始 = ^Q; 停止 = ^S; 悬念 = ^Z; rprnt = ^R; 弱化 = ^W; 下一个 = ^V; 丢弃 = ^O; 最小值 = 1;时间=0;-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8 opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke -flusho -extproc

在目标方面:

stty -a < /dev/ser1

名称:/dev/ser1 类型:serial 打开:5 +hupcl +cread -clocal -isig -icanon +iexten -echo +echo -echok +echoke -echonl +echoctl -noflsh -flusho -ignbrk +brkint -ignpar -parmrk -istrip -inlcr -igncr -icrnl +imaxbel +opost +onlcr -isflow -osflow -ihflow -ohflow intr=^C quit=^\erase=^? kill=^U eof=^D eol=^- eol2=^- swtch=^- start=^Q stop=^S susp=^Z dsusp=^- reprint=^- discard=^- werase=^- lnext= ^- min=01 time=00 fwd=^- login=^- pr1=^[ pr2=5B pr3=^- pr4=^- sf1=^- sf2=^-
sf3=^- sf4=^- left=44 right=43 up=41 down=42 ins=40 del=50 rub=^- can=^- home=48 end=59 par=none +inpck bits=8 stopb=1 baud=115200 rows=0,0