Bash 中延迟挂起 (Ctrl-Y) 的目的是什么?

Wil*_*ard 32 bash signals job-control jobs

适用的 Bash 手册页的完整部分仅说明:

如果运行 bash 的操作系统支持作业控制,则 bash 包含使用它的工具。在进程运行时输入挂起字符(通常是 ^Z、Control-Z)会导致该进程停止并将控制权返回给 bash。 输入延迟挂起字符(通常是 ^Y、Control-Y)会导致进程在尝试从终端读取输入时停止,并将控制权返回给 bash。 然后用户可以操纵这个作业的状态,使用bg 命令在后台继续它,fg命令在前台继续它,或 kill 命令将它杀死。A ^Z 立即生效,并具有导致挂起输出和预先输入被丢弃的额外副作用。

我从来没有用过Ctrl- Y; 我只是刚刚了解它。我只用Ctrl- Z(暂停)做得很好。

我试图想象这个选项的用途。什么时候有用?

(请注意,此功能并非在所有 Unix 变体上都存在。它存在于Solaris和 OpenBSD 上,但不存在于 Linux 或 FreeBSD 上。相应的设置是stty dsusp。)

也许不那么主观:有什么可以用Ctrl-Y不能用Ctrl-轻松完成的事情Z吗?

Ran*_*832 23

来自csh4BSD 手册

A^Z立即生效,就像一个中断,当它被输入时,挂起的输出和未读的输入被丢弃。还有另一个特殊键^Y,它在程序尝试读取(2)之前不会生成 STOP 信号。当您为某个作业准备了一些命令而您希望在它阅读完这些命令后停止这些命令时,可以提前输入这些命令。

因此,目的是在处理第一个输入时键入多个输入,并在完成后停止作业。


小智 12

假设有一个循环读取输入并执行。让任务完成它计算的当前指令可能很有用,而在它返回到新的命令行之前不中断它。于是就这样结束了一个循环。这将优雅地结束循环并防止它read在超时限制下再次运行。