我正在研究 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 绑定。