Bash/Shell通过配置文件.bashrc劫持命令行,实现输入数字前缀即可重复多次执行某条命令,替代手敲for循环

您所在的位置:网站首页 bash和shell Bash/Shell通过配置文件.bashrc劫持命令行,实现输入数字前缀即可重复多次执行某条命令,替代手敲for循环

Bash/Shell通过配置文件.bashrc劫持命令行,实现输入数字前缀即可重复多次执行某条命令,替代手敲for循环

#Bash/Shell通过配置文件.bashrc劫持命令行,实现输入数字前缀即可重复多次执行某条命令,替代手敲for循环| 来源: 网络整理| 查看: 265

要实现的效果

输入数字N + 空格 + 任意命令行:重复执行该条命令N次: 常规做法:

for i in {1..5};do pwd;done #此种做法命令略显冗长,特别命令和参数较长的话不方便光标移动和高效操作

改造方式:

通过Bash Shell配置文件(.bashrc)文件动态判断输入的命令行是否是以一个纯数字打头,如果是,执行我们预定义的操作来实现目的;

先决条件:

安装Bash Shell第三方开源拓展工具库bash-preexec:( https://github.com/rcaloras/bash-preexec ) 此库封装了两个回调函数preexec和precmd,分别对应命令执行前和命令执行后要执行的hook操作; 利用此库提供的这俩回调函数功能,可以实现更多骚操作(例如:动态更改Prompt提示符,计算命令的执行时间、终端输入算术表达式直接计算结果等等),此处不再赘述,具体用法参看官方Github文档说明;

Hook代码实现:

1、在preexec回调函数中加入以下代码块:

preexec() { exec 7>&1 8>&2 export COMMAND_EXEC_BEGINNING=$(date +'%s') #开始执行命令时记录时间戳 #echo "$BASH_COMMAND" #&7 7>&- #恢复标准输出 [ -t 8 ] && exec 2>&8 8>&- #恢复错误输出 [ -n "$COMP_LINE" ] && return # do nothing if completing [ "$BASH_COMMAND" = "$PROMPT_COMMAND" ] && return # don't cause a preexec for $PROMPT_COMMAND local this_command=`HISTTIMEFORMAT= history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//"`; #echo "printing the prompt $this_command"; #echo $this_command } 使用效果:

本文来自博客园,作者:晴云孤魂,转载请注明原文链接:https://www.cnblogs.com/cnhack/p/17148353.html



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3