如何监控bash / zsh提示输入?

时间:2015-11-24 17:13:19

标签: bash shell zsh

我需要在后台脚本中查看用户的提示输入。 (在zsh和bash中)。

例如,如果用户键入了

[3:30pm@home]> ssh user@23.23.23.23 ls -alh

我的后台进程在输入之前需要字符串“ssh user@23.23.23.23 ls -alh”。

$ PS1有提示字符串,但没有用户输入。

这可能吗?

对于后台,总体目标是获取用户的部分输入并将shell翻译为英语。例如,如果我要键入ls -al,我的$ PS1或$ PS2将更改为“在当前目录中列出长格式的所有文件”。因此,如果某人不完全记得-X或-x启用了带有ssh的X11转发,他们可以输入它并查看简单语言英语翻译是否符合他们的期望。

我希望它是一个zsh插件,或者人们扔进rc文件的脚本,因此不会有任何太重要的事情。

1 个答案:

答案 0 :(得分:1)

您是否需要实时输入?或者至少在接受该行之前?

对于最后一个选项,在zsh中有一个小部件accept-line,在接受输入行时会触发。您可以使用自己覆盖默认小部件,如下所示:

function accept-line
{
    #here, send the input to your script
    yourscript "$BUFFER"

    # ... do something here if you want

    # trigger the real widget to accept the line and run the input
    zle .accept-line
}
# register your new accept-line widget to replace the builtin one
zle -N accept-line

在这里,我使用了名称accept-line但是如果您想要命名覆盖函数my_superOverride,您可以在最后覆盖默认小部件:

zle -N accept-line my_superOverride