标签: stty

终端长度和宽度如何通过 SSH 和 telnet 转发?

当我查看终端模拟器的长度和宽度时,stty size它长 271 个字符,高 71 行。当我通过 SSH 登录到另一台服务器并执行时stty size,它也是 271 个字符长和 71 行高。我什至可以登录一些 Cisco IOS 设备,终端仍然是 271 个字符长和 71 行高:

C1841#show terminal | i Len|Wid
Length: 71 lines, Width: 271 columns
C1841#
Run Code Online (Sandbox Code Playgroud)

现在,如果我在本地机器上调整终端模拟器(Gnome 终端)窗口的大小stty size,远程服务器和 IOS 中的“显示终端”都会显示不同的行长和行数。终端长度和宽度如何通过 SSH 和 telnet 转发?

ssh terminal telnet stty

20
推荐指数
1
解决办法
2万
查看次数

为什么需要按两次 ^D 才能退出 `cat`?

让我们运行cat然后输入athen ^D- 你会看到cat没有退出。

cat+ a+ Enter+比较^D- 现在 cat 确实退出了。

那么,为什么在第一种情况下^D需要按两次退出cat,而^D在第二种情况下只需要按一次?

tty pty stty

13
推荐指数
1
解决办法
807
查看次数

将 bash 输入保持在屏幕的顶行

我想将bash命令提示符输入保留在屏幕顶部,以便将旧命令的输出向下推而不是向上推。

我怎样才能做到这一点?

terminal tty console stty virtual-consoles

12
推荐指数
1
解决办法
4745
查看次数

回声测试| stty -echo -> stty:标准输入:设备的 ioctl 不合适

我正在玩一个 perl 脚本,它接受用户输入以下内容:

system( qw( stty -echo ) );
$? == 0 or die "Error unable to disable character printing.\n";
print "$prompt: ";
my $input = <STDIN>;
Run Code Online (Sandbox Code Playgroud)

我以为我可以使用 echo 在响应中进行管道传输,但是它似乎与 stty -echo 命令冲突并产生以下错误:

stty: standard input: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

在不更改 perl 脚本的情况下,在 bash 中可以做什么来传递输入?导致问题的原因是什么?

bash perl stty

10
推荐指数
1
解决办法
3万
查看次数

STTY:如何将行/列设置为其支持的最大值?

我想要一些 83(cols)x40(rows) 大小在我的TTY 上,所以:

xubuntu@xubuntu:~$ stty size
30 90
xubuntu@xubuntu:~$ stty cols 83 rows 40
stty: standard input: Invalid argument
xubuntu@xubuntu:~$ stty size
30 83
Run Code Online (Sandbox Code Playgroud)

从我的示例中可以看出,我的计算机不支持 cols=40。
所以我必须尝试:

xubuntu@xubuntu:~$ stty rows 39
stty: standard input: Invalid argument
xubuntu@xubuntu:~$ stty rows 38
stty: standard input: Invalid argument
xubuntu@xubuntu:~$ stty rows 37
stty: standard input: Invalid argument
xubuntu@xubuntu:~$ stty rows 36
xubuntu@xubuntu:~$
Run Code Online (Sandbox Code Playgroud)

...直到我成功。

有没有办法直接将 stty 设置为最大值?也许是这样的:

xubuntu@xubuntu:~$ stty rows max
Run Code Online (Sandbox Code Playgroud)

stty

9
推荐指数
1
解决办法
3万
查看次数

为什么在命令运行时终端会回显击键?

我最近在运行tail -f的服务器的日志文件上运行,试图诊断错误,当我不小心撞到键盘并输入了一些字符时。它们与日志的输出混合在一起,无法分辨哪个是哪个。我已经无数次发生过类似的恼人的事情,我相信这里的许多其他人也发生过这种情况。

所以我的问题是:为什么 shell(或终端,或任何正在执行的操作)模糊地将键盘输入与命令输出混合在一起?

我不是在寻求针对眼前问题的实际解决方案。我也许可以想出某种方法让 shellstty -echo在命令运行和stty echo完成时运行。但我想知道设计这样的终端背后的基本原理。有什么实际目的吗?或者它只是出于兼容性原因而做的事情,还是根本没有考虑过的事情?

command-line shell terminal stty

7
推荐指数
1
解决办法
3101
查看次数

使用 echo vs screen 会话发送串行命令

我有一个由显示驱动程序控制的小型 LED 矩阵,该驱动程序接受串行命令来更新显示。我通过带有节点串行包的节点成功控制了它,但是我希望能够使用 echo 更新它,以便我可以在启动过程中使用 shell 脚本更早地控制它。

为了开始测试这个新方法,我设置了它:

chmod o+rw /dev/ttyUSB0
stty /dev/ttyUSB0 115200
Run Code Online (Sandbox Code Playgroud)

我可以使用屏幕向它发送命令:

screen -F /dev/ttyUSB0 115200
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试使用时:

echo -e 'title \r' > /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

它不起作用,当我在另一个窗口中监视响应时

cat -v < /dev/ttyUSB0
Run Code Online (Sandbox Code Playgroud)

我看到它正在接收消息,但它似乎是零散的,并且还不断响应错误,就好像我正在发送大量错误和/或空白命令一样。

如何使用 echo 模拟从屏幕发送的命令?

echo tty serial-console stty ttyusb

7
推荐指数
1
解决办法
3万
查看次数

如何将预先输入应用于 bash 历史搜索 (Ctrl-R)?

语境

在 bash 中预先输入:好

当 bash shell 忙(初始化、运行命令)时,可以在下一个提示出现之前键入

如果 shell 启动了一个程序,该程序将捕获密钥,但如果没有程序运行或如果程序没有捕获输入,则在出现提示后会在 shell 中插入什么类型。

例如:键入sleep 5,按 Enter,然后键入ls并按 Enter。 ls将在 sleep 完成后运行。在现实生活中,ls会被cprsync或许多其他程序所取代。这是一个典型的Typeahead功能,当您提前知道要键入什么时,它可以节省大量时间。

它也非常好,因为它允许复制粘贴多个命令并让它们按顺序运行。

实际用例包括 shell 需要时间来初始化。可能是由于任何原因计算机速度变慢,或者外壳在网络链接上速度较慢,等等。

bash 中的历史搜索:好

在 bash 提示符下,可以键入Ctrl-R以搜索历史记录。

当重用一些旧的命令行,甚至命令行序列时,这是一个非常宝贵的时间节省。按Ctrl-R,键入几个典型的搜索命令字符,按Ctrl-O需要多次按从那里重播记录的命令。

在历史搜索中提前输入:如何?

但是,有一个限制。我经常使用上面的序列并发现如果我Ctrl-R ls在 shell 提示实际出现之前输入例如,该Ctrl-R部分会被忽略但ls会显示该部分。

最终效果是在键入之前必须等待 shell 提示出现Ctrl-R,从而节省了部分时间。

有没有办法在提前Ctrl-R输入的情况下兑现?

bash terminal readline stty

7
推荐指数
1
解决办法
1728
查看次数

zsh 的“stty -echo”相当于什么?

我可以用 bash 隐藏终端中写的内容

stty -echo
Run Code Online (Sandbox Code Playgroud)

然而,这对 zsh 不起作用:运行此命令不会改变输出

stty -a
Run Code Online (Sandbox Code Playgroud)

stty -echofor zsh的等效命令是什么?

zsh stty

7
推荐指数
1
解决办法
2584
查看次数

了解 Return、Enter 和 stty icrlf

在 Ubuntu/gnome-terminal 中,如果我运行:

$ stty -icrnl
Run Code Online (Sandbox Code Playgroud)

然后启动 GHC 交互环境(一个 Haskell 控制台):

$ ghci
Run Code Online (Sandbox Code Playgroud)

然后按Return不提交行;然而,Enter确实如此。

但是,与:

$ stty icrnl
Run Code Online (Sandbox Code Playgroud)

双方ReturnEnter提交该行。

我不太理解这种行为;Return在这两种情况下肯定会提交换行符吗?

terminal stty

6
推荐指数
2
解决办法
4701
查看次数