如何在Unix中即时访问历史记录?


12

例如,如果我做一个

mkdir thisismyfolder912

我记得有一种thisismyfolder912比不得不做的更简单的方法

cd thisismyfolder912

那是什么方式,如何运作?另外,我还有其他使用方式吗?


1
将TAB-completion用于不在您最近的历史记录列表中的命令和目录。cd this<TAB>
反转

Answers:


10

您是在谈论经典历史记录扩展还是Readline处理?cd !$在接下来的输入线将在上一行的最后一个参数替代,或M-.M-_将使用的Readline进行粘贴。


1
发布另一个讨论Alt +的问题。
Michael Mrozek

我一直在寻找cd !$。“经典的历史记录扩展或Readline处理”我无法完全理解您的意思……
Lazer 2010年

2
@Lazer !$是一个历史扩展;Shell在解析您的命令时对其进行处理。M- 是一个readline击键;readline是处理您按的每个键的库,并且可以看到您按了M-。并自动为您
键入

9

如果您的问题是关于访问命令历史记录的,请尝试使用此命名良好的命令

history 

您也可以尝试Ctrl+ r,然后开始键入您想记住您最近键入的命令。

(reverse-i-search)`cd ': cd mydir/data/

点击ESC以选择命令或退出。这至少对我在SuSE上有效;不确定其他发行版。


4
哇!这实际上将改变我的生活。拧你history | grep ...
奥利2010年

这不仅与SuSE有关,我认为这是Bash的功能:)
sakisk 2011年

我刚刚阅读了有关vi用于管理命令行的信息。看起来超级酷。 使用vi编辑外壳命令
Banjer 2012年


2

这一直对我有用:

mkdir thisismyfolder
cd $_

观看了这一点,虽然:$!扩展到最后一个字,你实际键入,$_扩展到最后一个字展开后 -所以你可能echo /tmp/tmpfile*看到一堆要删除的文件,但随后rm $_将只删除其中的一个。
2014年

1

从另一个线程中获取一个笔尖(如果您输入):

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

然后,在.bashrc中,您可以从历史记录中开始输入内容,然后按向上箭头,然后与其逐个浏览历史记录,不如直接跳至以您已经拥有的内容开头的先前条目输入。

我想这对于问题中给出的特定示例并没有多大帮助,但这是帮助我即时访问历史的一件事。


1

如果您使用bash,我建议pushdpopd。您可以创建目录堆栈并快速浏览。请参阅以下示例:

PWD:~$ pushd /opt/google/chrome/resources/
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ pushd /etc/cron.daily/
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ pushd /opt/pac/lib/method/
/opt/pac/lib/method /etc/cron.daily /opt/google/chrome/resources ~
PWD:/opt/pac/lib/method$ popd
/etc/cron.daily /opt/google/chrome/resources ~
PWD:/etc/cron.daily$ popd
/opt/google/chrome/resources ~
PWD:/opt/google/chrome/resources$ popd
~
PWD:~$

如果使用缩写提示,则可使帖子更具可读性。(我指的是删除用户和主机名据我所知,显示PWD,而不是只。$演示的时候是很有用的pushd,等等)
暂停,直至另行通知。

1

在相关说明中,我建议在bash中使用histverify。把它放在你的〜/ .bashrc中:

shopt -s histverify

这将导致bash在扩展!$或其他历史记录功能后打印出命令,并让您有机会先查看它,然后再次按Enter才能真正运行它。对我而言,偶尔进行额外的按键检查​​是值得的。想要确保我正在运行cd foo命令,而不是命令rm -rf foo...

我也经常使用这种Ctrl-R方法,以及Alt-.(这非常适合您描述的场景)。我会偶尔使用!$。

这些是非常有用的通用技术。

但是要解决您的特定问题:

建立目录并直接将其复制到CD中是一种常见的组合,因此具有将其包装起来的功能很有用。

function mcd {
  local newdir='_mcd_command_failed_'
  if [ -d "$1" ]; then   # Dir exists, mention that
    echo "$1 exists..."
    newdir="$1"
  else
    if [ -n "$2" ]; then   # We've specified a mode
        command mkdir -p -m $2 "$1" && newdir = "$1"
    else                   # Plain old mkdir
        command mkdir -p "$1" && newdir="$1"
    fi
  fi
  builtin cd "$newdir"   # No matter what, cd into it
}

用法: mcd thisismyfolder


1

如果您的外壳使用readline(是的情况bash),您可以执行一些操作,例如一起按ATL+ .

GNU Readline文档中

yank-last-arg(M-或M-_)

将上一个参数插入上一个命令(上一个历史记录条目的最后一个单词)。带有一个参数,其行为与yank-nth-arg完全相同。对yank-last-arg的连续调用将返回历史记录列表,依次插入每行的最后一个参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.