【问题标题】:Searching your command history on macOS terminal在 macOS 终端上搜索您的命令历史记录
【发布时间】:2017-06-06 10:50:12
【问题描述】:

在 macOS 终端中搜索我的命令历史记录的快捷方式是什么?

历史记录可用于搜索多长时间?它存储在哪里?

【问题讨论】:

    标签: bash macos history


    【解决方案1】:

    如何使用 Ctrl+RMac 中的 Terminal 实用程序上搜索命令历史记录,

    dudeOnMac: freddy$ whoami
    freddy
    (reverse-i-search)`who': whoami
    

    控制history 的保留时间取决于几个shell 环境变量,HISTFILESIZE 这只不过是您想要保留的历史行数。在.bash_profile中设置一个巨大的值让它生效

    HISTFILESIZE=10000000 
    

    【讨论】:

    • 感谢您的回答!这很有帮助。这正是我想要的。 :)
    • 另外值得注意的是,ctrl+R 显示的是最后一个,但多次点击ctrl+R 会显示之前的匹配项。
    【解决方案2】:

    使用Ctrl + R 从终端的历史记录中搜索命令。

    (reverse-i-search)`': 
    

    键入您要搜索的命令的任何子字符串,例如grep

    (reverse-i-search)`grep': grep "XYZ" abc.txt
    

    它将返回与您的输入匹配的最新命令。如果这不是您要搜索的命令,请继续按 Ctrl + R 进行下一次匹配,直到找到您的命令。

    找到命令后按Return 执行它。

    如果你想在不运行任何命令的情况下退出,请按Ctrl + G

    PS:这个答案与 Inian 建议的相同,只是提供了更多细节以方便使用。

    【讨论】:

      【解决方案3】:

      命令历史存储在您的主文件夹下名为 .bash_history 的隐藏文件中。要在 nano 中查看它的内容,请在终端中使用以下命令:

      nano ~/.bash_history
      

      或使用文本编辑器打开(默认为 TextEdit):

      open ~/.bash_history
      

      就我而言,这是一个很长的列表,当我滚动浏览时,似乎最后一个 ~500 命令存储在这里。

      【讨论】:

      • 谢谢,您的回答完成了@Inian 关于存储位置的回答。 :)
      • @balazs630 nano 是一个编辑器,不应该用来读取没有编辑意图的文件。至少,这样做会产生意外编辑的风险。而是使用 less,它是一个命令行交互式应用程序,提供读取访问权限,但没有编辑功能。
      • 历史记录存储在 ~/.zsh_history 或 ~/.bash_history 或 ~/.history 中,具体取决于您的 shell。
      【解决方案4】:

      在 Unix 和 Linux Stack Exchange 上将答案从 this answer 迁移到 SO:

      ctrl+R 将打开历史搜索向后。现在开始输入您的命令,这将给出第一个匹配项。通过再次按下 ctrl+R,您可以循环浏览历史记录。

      如果你喜欢超级懒惰,你可以绑定上/下箭头键来执行此搜索,我在我的.inputrc 中有以下内容将上/下箭头键绑定到history-search-backwardhistory-search-forward

      # Key bindings, up/down arrow searches through history
      "\e[A": history-search-backward
      "\e[B": history-search-forward
      "\eOA": history-search-backward
      "\eOB": history-search-forward
      

      只需键入一些内容(可选),然后按向上/向下箭头键即可在历史记录中搜索以您键入的内容开头的命令。

      要在.bashrc 而不是.inputrc 中执行此操作,您可以使用:

      bind '"\e[A": history-search-backward'
      

      【讨论】:

      • 我尝试添加 bashrc,但它显示 .bashrc:1: command not found: bind
      【解决方案5】:

      使用这个命令-

        history
      

      这适用于 OSX 和 Linux。

      历史记录存储在 ~/.zsh_history 或 ~/.bash_history 或 ~/.history 中,具体取决于您的 shell。

      历史记录存储 1000 或 2000 行,具体取决于您的系统。

       echo $HISTSIZE
      

      【讨论】:

      • @HamzaZymawy 你的意思是 $HISTSIZE 的大小吗?
      • 是的 $HISTSIZE 我想增加它
      • 将 export HISTSIZE= 添加到您的 shell 配置文件中。 ~/.zshrc 以 z shell 为例。
      • 这对我来说是最好的解决方案,结合grep,例如要查找包含字符串“ssh”的命令,请使用> history | grep ssh
      • @TomWilson 是的,先生。
      【解决方案6】:

      您还可以尝试以下方法:

      history | grep 'git'
      

      其中 'git' 是您要查找的命令。

      【讨论】:

        【解决方案7】:

        对于那些想要从历史记录中搜索特定命令的人,您可以使用reverse-i-search 进行。反向搜索允许您输入属于您要查找的命令的任何关键字(任何),reverse search 导航回历史记录,逐步匹配先前的命令并返回整个命令。

        当人们不记得他们经常使用的所有方便的冗长命令时,它特别有用。要进行反向搜索 ctrl + R 并输入您拥有的任何线索,这将返回与您输入的单词匹配的先前命令。然后一旦找到命令,点击Enter直接从搜索中执行它。

        【讨论】:

          【解决方案8】:

          自动化 AppleScript

          既然您提到通过 Terminal.app 查看历史记录是一种快速解决方案。您可能想要自动化或快速查看历史记录,可能从 Dock 中。您可以使用 AppleScript 应用程序作为一种替代方法。与许多其他方法一样,这是一种创建简单快捷方式的可选方法。

          1. 打开 AppleScript 编辑器应用程序。
          2. 添加您指定的命令,用于历史记录。
          3. 代码
          tell application "Terminal"
                  do script "history"
          end tell
          
          1. 另存为应用程序,拖动到停靠栏以方便使用。

          历史存储和时间存储详情

          HISTSIZE 确定要写入历史文件的行数。

          HISTFILESIZE 确定文件的长度。

          了解历史记录的存储时间

          echo $HISTSIZE $HISTFILESIZE

          注意:您还可以在两个变量的长度中增加命令历史存储大小。您可以通过位于您的~/.bash_profile 文件中的HISTSIZEHISTFILESIZE 环境变量来实现这一点。

          可以通过修改~/.bash_profile来实现,带有SIZE的数字占位符代表的是数字,以行值为例:

          export HISTFILESIZE=SIZE # Example 1000
          export HISTSIZE=SIZE # Example 10000
          

          macOS 11 Big Sur 之前的版本

          cat ~/.bash_history
          

          HISTFILESIZE 只会设置一个最大历史值,该值会在会话开始时存储到历史文件中。 HISTSIZE 将具体确定将存储多少行,或者换句话说,写入会话的结束。如果确定集合HISTFILESIZE 的值大于设置的HISTSIZE,则您将不会查看大于集合HISTSIZE 的历史记录。原因是 history 文件被 HISTSIZE 覆盖,除非使用 histappend 选项打开 ON

          您也可以使用histappend 来附加历史记录,如果打开了histappend shell 选项,则会将行附加到历史记录文件中。否则,覆盖的替代方案继续进行。

          Bash GNU - histappend

          macOS 11 大苏尔

          nano ~/.zprofile

          修改历史环境变量,设置为一个值:

          export HISTFILESIZE=1000
          export HISTSIZE=SIZE=1000
          

          运行source 命令可用于将任何函数文件加载到当前shell 脚本或命令提示符中。

          source ~/.zprofile
          echo $HISTSIZE $HISTFILESIZE
          

          输出:

          1000 1000
          

          存储一些历史记录的输出:

          cat ~/.zsh_history
          

          【讨论】:

            【解决方案9】:

            对于 macOS Big Sur,该文件现在是 .zsh_history

            如果您在终端中执行 vi ~/.zsh_history,您可以通过按 / 然后按搜索词来使用正则表达式。

            【讨论】:

              【解决方案10】:

              要查看或调用最近使用的命令,您只需按向上箭头键即可依次回读 .bash_history 中存储的历史记录。

              【讨论】:

                【解决方案11】:

                为了方便搜索历史,我建议你安装fzf

                它是一个交互式 Unix 命令行过滤器,可用于任何列表;文件、命令历史、进程、主机名、书签、git 提交等。

                只需安装它,点击ctrl + R,您将滚动浏览您的shell历史,无需grep或等待很长时间直到您等待的命令弹出。

                它支持 Mac OS、Linux 甚至 Windows。

                【讨论】:

                  【解决方案12】:
                  # USAGE: find.history cd
                  # filter commands in shell history by a search term and execute the selected command
                  function find.history {
                    eval $(history | grep "$1" | tail | awk '{$1=""}1' | tail -r | peco)
                  }
                  

                  您需要安装peco

                  https://github.com/peco/peco

                  [$]> brew install peco

                  【讨论】:

                    猜你喜欢
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2023-04-01
                    • 2013-08-17
                    • 2017-05-25
                    • 2012-11-30
                    • 1970-01-01
                    相关资源
                    最近更新 更多