Unixでその場で履歴にアクセスする方法は?


12

たとえば、私が

mkdir thisismyfolder912

に切り替えるthisismyfolder912よりも簡単な方法があることを覚えています

cd thisismyfolder912

その方法は何で、どのように機能しますか?また、これを使用できる他の方法は何ですか?


1
最近の履歴リストにないコマンドとディレクトリにはTAB補完を使用してください。cd this<TAB>
反転

回答:


10

あなたは古典的な歴史の拡張、またはReadline処理について話していますか?cd !$次の入力行では、前の行の最後の引数を置換するかM-.M-_Readlineを使用してヤンクします。



探していましたcd !$。「古典的な歴史の拡張またはReadline処理」私はあなたが何を意味するのか正確に理解していません
...-Lazer

2
@Lazer !$履歴拡張です。シェルは、コマンドを解析するときにそれを処理します。M-。readlineキーストロークです。readlineは、押した各キーを処理するライブラリであり、M-を押したことがわかります。最後のコマンドの最後の引数を自動的に入力します
Michael Mrozek

9

コマンド履歴へのアクセスに関する質問の場合は、このわかりやすいコマンドを試してください

history 

また、Ctrl+を試してr、最近入力したことを思い出そうとしているコマンドの入力を開始することもできます。

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

ヒットESCしてコマンドを選択するか、終了します。これは少なくともSuSEで機能します。他のディストリビューションについてはわかりません。


4
うわあ!これは実際に私の人生を変えるでしょう。あなたをねじ込みますhistory | grep ...
オリ

これはSuSE関連だけでなく、Bashの機能だと思います:)
sakisk

viコマンドラインの管理に使用する方法について読んだだけです。超かっこいい。 viを使用してシェルコマンドを編集する
Banjer


2

これは常に私のために働いています:

mkdir thisismyfolder
cd $_

けれども、この気を付けろ:$!あなたが実際に入力した最後の単語に展開し、$_最後の単語に展開拡張後 -あなたがかもしれないのでecho /tmp/tmpfile*、あなたが削除したいファイルの束を見たが、その後rm $_にのみ、それらのいずれかを削除します。
jmb 14年

1

あなたが置く場合、別のスレッドからヒントを拾う:

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

.bashrcで、履歴から何かを入力し始め、上矢印を押すと、項目ごとに履歴をたどるのではなく、既に持っているもので始まる前のエントリにスキップします。入力しました。

これは質問で与えられた特定の例ではあまり役に立たないと思いますが、それは私がその場で履歴にアクセスするのを助ける一つのことです。


1

もしbashを使用している場合、私は示唆pushdしてpopd。ディレクトリのスタックを作成して、すばやく参照できます。この例を参照してください。

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:~$

短縮プロンプトを使用すると、投稿が読みやすくなります。(ユーザーとホスト名を削除することを指します。$デモンストレーションを行うpushdときなどにPWDを表示するのが便利であることを理解しています)
さらに通知があるまで一時停止します。

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を連続して呼び出すと、履歴リストに戻り、各行の最後の引数が順番に挿入されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.