问题标签 [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.
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 无法识别的原因
然后
有一部分选项和操作数适用于这两种实现。你可以在这里看到那些
bash - 在mac上捕获光标终端位置的Shell脚本会产生额外的字符
我使用https://askubuntu.com/questions/366103/saving-more-corsor-positions-with-tput-in-bash-terminal中的答案作为 shell 脚本,它适用于提取当前位置终端。
但是,在 Mac 机器上,它会产生额外-en
的一些新行和空格,如下所示。
我怎么能避免输出额外的-en
和新的行和额外的空格
c - 程序不专门拦截 SIGQUIT 吗?
这个程序似乎无法拦截SIGQUIT信号虽然它可以拦截SIGINT
我正在运行 ubuntu 20 并且运行stty -a
命令给出了第一行输出,我猜这意味着 SIGQUIT 已正确映射到^D但按下它似乎什么也没做。我也尝试使用^\因为我在quit=^\
和sttyeof=^D
说的那样感到困惑,所以如果有人可以解开两人之间的这个误会。
linux - 将屏幕会话配置为与 xterm 终端完全相同
我希望能够通过 screenrc 或在会话中配置屏幕会话,使其行为类似于 xterm 终端。目前我有一个 ac# 应用程序,它使用 ssh.net 库从 Windows 机器 ssh 到 Linux 机器,我在该机器上附加到屏幕会话并发送命令并接收回复。如果我附加到屏幕会话与我未附加到屏幕会话时相比,我会看到同一命令的两种不同类型和响应。为了演示这个问题,我将使用 putty 终端复制该问题并记录数据。
- 从 Windows 打开一个腻子终端
- 更改 Session->Logging 设置并选择 SSH Packets,同时浏览到保存 putty.log 文件的位置
- 设置您的 IP 地址并连接到 Linux 机器
- 登录后,发出以下命令 printf "abc\6\n",该字符串包含一个 ack 字符
- 响应将打印 abc 当然它不会显示 \6 因为它不是可打印字符
- 打开 putty.log 文件,您将看到响应数据包数据包含 \6,这是正确的行为。
- 现在通过发出以下命令创建会话:screen -dmS test
- 通过发出以下命令附加到会话:screen -Rr test
- 再次发出以下命令 printf "abc\6\n"
- abc 将按预期打印,但是如果您查看 putty.log 中的响应数据包数据,它将不再具有 \6 字符
- 我可以通过管道这样的命令来解决这个问题 printf "abc\6\n" | cat -v 将 \6 转换为可打印形式并在屏幕上显示 ^F,我宁愿在我的数据包数据中接收 \6,这不是一个理想的解决方案,但至少它为我的问题提供了一个解决方案。
以下是我无法解决的更严重的问题。为了演示,请执行以下操作:
- 从 Windows 打开一个腻子终端
- 更改 Session->Logging 设置并选择 SSH Packets 并浏览到保存 putty.log 文件的位置
- 设置您的 IP 地址并连接到 Linux 机器
- 登录后,通过发出以下命令更改 stty 设置(告诉终端不要用回车替换新行):stty -onlcr
- 然后发出命令 ls -al,
- putty.log 文件将包含没有额外字符的正确数据集。
- 现在通过发出以下命令创建会话:screen -dmS test
- 通过发出以下命令附加到会话:screen -Rr test
- 再次发出以下命令 stty -onlcr
- 再次发出 ls -al
- 如果您查看 putty.log 中的响应数据包数据,您会看到在收到一定数量的数据包后,响应将在每个响应前面包含额外的字符。额外字符采用以下格式 [13C. [ 和 C 之间的数字不同。
我想让我的响应与标准 xterm 终端的行为方式相同,为什么会有差异,是否有办法配置屏幕以获得与 xterm 类型的终端一致的响应。
resize - 如何在 tmux send-keys 命令中使用内部变量?
有什么办法可以让我做类似的事情bind-key b send-keys "stty cols #{pane_width} rows #{pane_height}"
- 我使用 TMUX。
- 我经常需要使用 ssh 登录到没有
resize
命令的 CentOS 服务器。 - 我无法在这些服务器中安装命令。
- 当我调整 tmux 窗格或终端窗口的大小时,服务器的 stty 无法自动调整大小。
我现在正在使用一种复杂的方法来实现这一点。
我在我的,中写了一个display
表扬。.tmux.conf
bind-key b display -p "stty cols #{pane_width} rows #{pane_height}"
然后我可以将其复制display-message
并粘贴到 ssh-server 的命令行中。
terminal - 为什么`stty cols 40`在两个shell bash和xonsh中有不同的效果
在 Linux/macOS 上stty
的xonsh shell 中使用时出现奇怪的行为。(命令似乎不遵守 xonsh 下定义的列,但它们在 bash 下这样做。)
为了更好地理解这种情况,我编写了一个小 C 程序,它为 3 个标准流调用ioctl ,并打印出宽度。TIOCGWINSZ
stdin
stdout
stderr
在执行任何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 col
xonsh 下的调用这一事实。
但为什么会这样呢?我怎样才能发出一个stty
-style 命令,在 xonsh 下将所有标准流的宽度设置为 40?
bash - 如何设置 stty -echo 并从 /dev/stdin 读取
我正在尝试编写一个从标准输入读取并从 tty 接收用户输入的程序。我想禁用用户输入的呈现,因为它与我的菜单系统混淆,并且如果我重绘以删除它会导致闪烁。stty -echo
但是,如果脚本从标准输入接收输入,我似乎无法使用。
这是脚本的简化示例:
陷阱输入
你好.txt
running$ ./trapinput
将在启动时回显“Is tty”,在被杀死时会回显“Exit tty”,同时运行程序的其余部分,正如我所期望的那样。它还可以防止直接显示用户输入,从而允许我将其打印在屏幕上的正确位置。
但是,如果我运行$ echo "test" | ./trapinput
或者$ ./trapinput < hello.txt
它会回显“不是 tty”并且stty -echo
未设置导致用户输入显示在我不想要的位置。
如何禁用用户输入的呈现但保留输入文本/使用文件重定向的能力?
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,但是随着时间的推移会变得有点不方便。
谢谢!
(如果我对问题的描述不是很好,很抱歉 - 业余爱好者和第一次在这里发帖。如果您需要更多信息或图片,请告诉我。)
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