我可以为空字符串取别名吗?

Ili*_*rim 1 bash alias command-line

在 bash 中,您可以将空命令别名为某些东西吗?换句话说,是否识别出用户Enter在 shell 提示符下只按下了键?例如,如果你想用一个空白的 shell 条目清除屏幕,你如何Enterclear命令设置别名?

Sco*_*ott 5

以下是如何(有效地)将空命令别名为某物:

将以下内容放入您的.bashrc

command1()
{
    if [ "$BASH_COMMAND" != command2 ]
    then
        command_flag=1
    fi
    return 0
}
trap command1 debug
command2()
{
    if [ ! "$command_flag" ]
    then
        echo "clear"                            # Put whatever command(s) you want here.
    fi
    command_flag=
}
PROMPT_COMMAND=command2
Run Code Online (Sandbox Code Playgroud)

如有必要,请替换command1command2始终使用您不太可能随机输入的单词。

  • trap command1 debug将导致command1每次您(用户)键入命令时执行该函数。
    • 如果最近要执行的命令不是command2command1则设置command_flag.
  • 分配command2toPROMPT_COMMAND 将导致command2在 shell 即将发出提示时执行。
    • 如果command_flag有一个非空值,则表示command1刚刚执行,这意味着用户刚刚运行了一个命令。在这种情况下,什么都不做。
    • 如果command_flag确实具有非空值,这意味着用户只需点击Enter。在这种情况下,做您想做的事情(例如,清除屏幕)。
    • 在任何一种情况下,设置command_flag为空白,这样一切都会在下一个循环中工作。

注意:我很确定这是特定于 bash 的(即,POSIX 不支持)。

这个答案基本上是从我对在 bash 中的命令后添加垂直空间的答案中复制的。 对于其他方法,另请参见在 PROMPT_COMMAND 中判断最后一个命令是否为空