屏幕绑定键需要额外的 Enter (RET) 键

屏幕绑定键需要额外的 Enter (RET) 键

我正在研究 GNU Screen 的配置,并将以下配置放入~/.screenrc

bind l eval 'exec ls'

所以,现在当我输入 时C-a l,它会ls在当前目录下运行。到目前为止一切都很好。但问题是我必须按额外的 Enter 键才能退出进程并再次进入终端。如何避免按下额外的 Enter 键?

答案1

当您键入 时C-a l,它将运行ls并在当前窗口中显示输出,无论窗口中正在运行什么程序。

如果您使用在窗口中运行的 shell 执行此操作,并且 shell 显示其提示符,则 的输出ls将显示在提示符之后。 shell 不知道发生了什么,因为ls它是由 Screen 直接执行的。如果您是在提示符下输入的,那么您目前输入的内容仍然存在,等待您按 Enter 键。如果您在 后按 Enter C-a l,则会执行您输入的命令;如果您在最后一个提示符下没有输入任何内容,那么这是一个空命令,这会导致 shell 显示一个新的提示符。

在 bash 或 zsh 中,按Ctrl+L重新显示提示符和当前输入行。

如果您想避免这样做,请将 a 注入^L到屏幕内运行的应用程序中,希望它是一个显示提示的 shell。由于您想要运行多个命令,因此需要显式调用 shell。你需要!通过FDPA否则^L不会进入外壳。

bind l exec ! sh -c 'ls /; screen -X stuff ^L'

该命令不是很有用,因为它始终ls在 Screen 的当前目录中运行,当您在 shell 中更改目录时,该目录不会更改。如果您希望密钥ls从 shell 运行,请在 shell 的当前目录中进行 shell 绑定,而不是 Screen 绑定。

相关内容