从PROMPT_COMMAND访问最新命令(不是args)

时间:2019-01-23 02:30:11

标签: bash command-prompt

我的PROMPT_COMMAND=中有独立的.bash_profile。每次用户输入命令时,该命令就会运行。 我想按用户获取最后一条命令的第一个单词。

例如,如果用户运行:$ printf "Hey!",我想从我的printf访问PROMPT_COMMAND

$0给我-bash,而$1$2,...给我论点,如下面的网站所述。 https://wiki.bash-hackers.org/scripting/posparams#the_first_argument

但是在上面的示例中,如何访问第一个单词,例如printf

最好,我想尽可能多地使用内置命令。

1 个答案:

答案 0 :(得分:1)

您可以使用 fc

$ printf "%s %s\n" "foo" "bar"
foo bar
$ fc -ln -1
       printf "%s %s\n" "foo" "bar"

这会显示带有参数和怪异间距的整个命令,所以我想你可以做到:

$ fc -ln -1 | awk '{ print $1 }'
printf

编辑:如果您不想按 Return 作为fc回来,则可以这样做:

$ fc -ln -1 | awk '$1 !~ /fc/ {print $1}' 

要在~/.bash_profile中创建功能

# Show last command without args
lcm () { fc -ln -1 | awk '$1 !~ /lcm/ {print $1}' ; }

然后例如:

$ date
Wed Jan 23 16:29:14 MST 2019
$ lcm
date

GNU : Bash History Built-ins