web-dev-qa-db-ja.com

Unixでその場で履歴にアクセスするにはどうすればよいですか?

たとえば、私が

mkdir thisismyfolder912

thisismyfolder912に切り替えるには、

cd thisismyfolder912

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

12
Lazer

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

10
jmb

コマンド履歴へのアクセスに関する質問の場合は、この名前の付いたコマンドを試してください

history 

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

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

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

9
Banjer

それは同じくらい簡単です Alt.

$ mkdir lasdfjalsdkjf
$ cd 

Alt.

$ cd lasdfjalsdkjf
7
Umang

これはいつも私のために働いてきました:

mkdir thisismyfolder
cd $_
2
Sandy

関連するメモとして、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
jmanning2k

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

あなたが置くならば、別のスレッドからチップを拾う:

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

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

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

1
frabjous

シェルがreadlineを使用している場合(bashの場合)、を押すようなことを行うことができます ATL+. 一緒?

GNU Readlineドキュメント から:

yank-last-arg(M-。またはM-_)

前のコマンド(前の履歴エントリの最後のワード)に最後の引数を挿入します。引数を指定すると、yank-nth-argとまったく同じように動作します。 yank-last-argを連続して呼び出すと、履歴リストに戻り、各行の最後の引数が順番に挿入されます。

1
Elitmiar