Evg*_*nko 30 linux keyboard-shortcuts zsh shell
我遵循这种模式,暂停任务,然后让它在Ctrl-Z bg序列中过于频繁地继续。
我想知道有没有办法将其压缩为单个按键?
我的壳是 zsh
Gil*_*il' 27
的Ctrl+Z序列由终端处理,而不是由外壳。(有用的背景:“终端”、“外壳”、“tty”和“控制台”之间的确切区别是什么?)
只有一小部分不可扩展的函数可以绑定到终端中的键。您可以自定义绑定到这些功能的键,但不能添加其他功能。这些函数分为三类:
eof
, Ctrl+ D),行结尾 ( eol
, Ctrl+ M), 向左擦除字符 ( erase
, Ctrl+ H), 向左擦除单词 ( werase
, Ctrl+ W), 擦除行 ( kill
, Ctrl+ U)。stop
(Ctrl+ S), start
(Ctrl+ Q)。仅在旧的串行终端上有用,当终端跟不上计算机时会丢弃字符,反之亦然。intr
, Ctrl+ C),强制退出(quit
, Ctrl+ \),挂起(Ctrl+ Z)。包括 Linux 在内的一些系统扩展了该列表,但我从未见过包含后台的系统。请注意,它将在内核中的终端驱动程序和终端仿真器中都获得支持。所以你必须处理挂起,它向前台作业发送一个SIGTSTP信号。这会在前台作业的领导者(通常是外壳程序)的父进程中触发SIGCHLD。当 shell 收到 SIGCHLD 时,它会调用waitpid
以找出通知它的原因,并且在检测到后台作业被暂停时,它会显示一个通知(例如[1] + 12345 suspended mycommand
)和一个新提示。
您可以对 shell 进行编程SIGCONT
以向前台作业发送信号。我不认为 zsh 有一个钩子,你需要修补源代码。并且 zsh 无法知道您是否真的打算中断程序(哎呀,这个程序可能做错了,让我在整理它时暂停它)或将其作为后台。
我所做的是将zsh 中的Ctrl+Z键序列设置为背景当前作业 ( %%
)。这样,我可以通过按Ctrl+ Z Ctrl+将前台作业发送到后台Z。当我在做的时候,当当前输入行不为空时,我让Ctrl+Z做一些其他有用的事情(所以我还没有从子进程中回来):“暂停”当前输入行,允许我输入另一个命令,之后中断的行被推回输入缓冲区。
fancy-ctrl-z () {
if [[ $#BUFFER -eq 0 ]]; then
bg
zle redisplay
else
zle push-input
fi
}
zle -N fancy-ctrl-z
bindkey '^Z' fancy-ctrl-z
Run Code Online (Sandbox Code Playgroud)
^z ^z 像上面的 zsh 一样可以在 bash 中使用,尽管它有点笨拙,而且我运行它的时间不长:
"\C-z": "bg\n"
因此,当命令运行时,^z 表示挂起,然后在 bash 提示符下关闭。
归档时间: |
|
查看次数: |
16131 次 |
最近记录: |