ruby打印命令历史记录的排序列表。有助于确定需要别名的命令。(代码片段)

author author     2023-01-14     414

关键词:

#!/usr/bin/env ruby

class String
  ENCODING_OPTS =  invalid: :replace, undef: :replace, replace: '', universal_newline: true .freeze
  def remove_non_ascii
    encode(Encoding.find('ASCII'), ENCODING_OPTS)
  end
end

# @zsh_history = %x(cat ~/.zsh_history |sed 's/\xc2\x91\|\xc2\x92\|\xc2\xa0\|\xe2\x80\x8e//' 2> /dev/null).split("\n")
# opts = invalid: :replace, undef: :replace, replace: '', universal_newline: true

def set_history_aliases(shell)
  [
    %x(cat ~/.#shell_history).remove_non_ascii.split("\n"),
    %x(#shell -i -c 'alias').remove_non_ascii.split("\n"),
    %x(git config --get-regexp alias*).remove_non_ascii.split("\n"),
  ]
end

case ENV['SHELL']
when /zsh/i
  shell_history, shell_aliases, git_aliases = set_history_aliases('zsh')
when /bash/i
  shell_history, shell_aliases, git_aliases = set_history_aliases('bash')
else
  warn 'Unknown shell'
  exit(1)
end

SHELL_ALIASES = 
shell_aliases.map do |a|
  begin
    array = a.split("=", 2)
    SHELL_ALIASES[array[0]] = array[1].gsub(/['"]?/, '')
  rescue
  end
end

GIT_ALIASES = 
git_aliases.map do |a|
  array = a.split(' ', 2)
  GIT_ALIASES[array[0].gsub(/alias\./, '')] = array[1]
end

converted_history = shell_history.map do |line|
  line.split.map do |item|
    SHELL_ALIASES[item] || GIT_ALIASES[item] || item
  end.join(' ')
end

history_count = Hash.new(0)
converted_history.each  |item| history_count[item] += 1 
sorted_history = history_count.sort_by  |_k, v| v 
sorted_history.each do |arr|
  begin
    $stdout.puts "#arr[1]: #arr[0]"
  rescue Errno::EPIPE
    exit(74)
  end
end

linux基础--history命令

...定并且不为空,它的值会被用于strftime(3)的格式字符串来打印与每一个显示的历史条目想关联的时间戳,否则不打印时间戳。退出状态:返回成功,除非使用了无效的选项 查看详情

history命令历史(代码片段)

history命令选项:-c:清除命令历史;-d:offset:删除指定命令历史;-r:从文件读取目录历史至历史列表中;-w:把历史列表中的命令追加至历史文件中;history#:显示最近的#条命令;调用命令历史列表中的命令:!#:再一次执行历史列... 查看详情

linuxhistory命令使用技巧

...情况下,该命令读取文件​​~/.bash_history​​并在终端中打印内容。要查看历史执行的命令,请执行以下操作:history然后您可以滚动浏览输出的内容以找到您需要的命令。以下是几个使用​​history​​命令的技巧修改history的历... 查看详情

怎样查看浏览历史记录

参考技术A怎么查找历史浏览记录-怎样查找最近访问过的网页有多种方法可查找您在过去几天、几小时或几分钟内曾经浏览过的网页和网站。查找最近几天访问过的网页在工具栏上,单击“历史”按钮。出现历史记录栏,其中包... 查看详情

linux怎么清除history记录

1、history-a将当前shell会话的历史命令追加到命令历史文件中,命令历史文件是保存历史命令的配置文件。2、history -c清空当前历史命令列表。3、history -d删除历史命令列表中指定序号的命令。4、history -n从命令历史文件... 查看详情

git部分知识小结

...跟踪并管理的是修改,而非文本。这里有一个简化的图,有助于更好的操作git。这里有一些常用的命令,总结一下,以便日后查看。gitlog查看commit记录。gitreset--hardHEAD^:用于回退到某个commitgitreflog:查看命令历史,以确定回到未... 查看详情

如何在 Android 的 TextView 中打印完整的 logcat 历史记录?

】如何在Android的TextView中打印完整的logcat历史记录?【英文标题】:HowcanIprintthefulllogcathistoryinaTextViewinAndroid?【发布时间】:2016-04-2403:47:30【问题描述】:我正在使用logcat在我的Android应用程序中记录消息,我希望能够访问这些消... 查看详情

怎么用cmd查看操作历史记录

...o;开始”——所有附件——附件——命令提示符,如图所示。  现在就会打开“命令提示符”对话框,如图所示。  快捷键法:  在打开“命令提示符”对话框的情况下,单击“F7”... 查看详情

置顶git常用命令记录

...查看提交历史,以便确定要回退到哪个版本。gitreflog查看命令历史,以便确定要回到未来的哪个版本。      查看详情

history命令详解

  Linux下History命令主要用于显示历史指令记录内容,下达历史纪录中的指令。>History命令语法:[[email protected]]#history[n][[email protected]]#history[-c][[email protected]]#history[-raw]histfiles参数:n :数字,要列出最近的n... 查看详情

历史记录如何删除

...-Internet选项。3、在Internet选项常规选项中勾选退出时删除历史记录,然后点击删除按钮进入设置界面。4、在删除设置界面勾选删除的内容,然后点击删除按钮,完成设置。对过去的一些人和事,通过各种方式保留下来,并能够... 查看详情

linux防止命令被记录(代码片段)

...有时候输入敏感信息需要避免被记录。解决在Linux中防止命令记录主要有以下两种方式:方法1:在命令前添加空格在Linux中,命令历史记录保存在“~/.bash_history”文件中。如果在命令前添加一个空格,这个命令就不会被记录到历... 查看详情

使用 JCL 排序在 x 条记录后写入字符

...个JCLSORT,它将对各种字段进行排序/重新格式化并将它们打印到一个新的输出文件中,如下面的代码所示。我需要修改此代码,以便在每第十(10)条记录的开头打印数字“9”。我想我需要一个“IFTHEN”,但我不确定它 查看详情

无法使用 ruby​​ xmpp4r 获取以前的群聊历史记录

】无法使用ruby​​xmpp4r获取以前的群聊历史记录【英文标题】:Notabletogetpreviousgroupchathistoryusingrubyxmpp4r【发布时间】:2013-01-1619:13:59【问题描述】:我正在使用ruby​​xmpp4r库通过openfire服务器实现多用户群聊应用程序。我已经... 查看详情

cad中的plot命令如何使用?

PLOT是打印命令。将图形打印到绘图仪、打印机或文件。显示“打印”对话框。单击“确定”,开始按当前设置打印。注: 打开“未压缩的纹理”后,打印图形中的图像时,其质量会有所降低。“未压缩的纹理”不影响渲染... 查看详情

怎么删除历史记录?

...-Internet选项。3、在Internet选项常规选项中勾选退出时删除历史记录,然后点击删除按钮进入设置界面。4、在删除设置界面勾选删除的内容,然后点击删除按钮,完成设置。对过去的一些人和事,通过各种方式保留下来,并能够... 查看详情

windows7运行无法记录历史命令问题解决

Windows7运行无法记录历史命令,每次都需要手动敲命令,解决方法如下:1、任务栏中右键,选择“属性”菜单;2、在弹出框中的“[开始]菜单”选项卡的隐私区域,勾选“存储并显示最近在[开始]菜单中打开的程序”;3、再次通... 查看详情

如何在linux系统中快速切换目录

...种痛苦的事情,但以下这些利用cd和pushd切换目录的技巧有助于你节省时间和精力。在Linux命令提示中,用cd命令来改变当前目录。这是cd命令的一些基本用法:改变你的根路径,键入cd,按回车键。进入一个子目录,键入cd,空格... 查看详情