よく使用するコマンドをすばやく保存してアクセスする方法は?


37

私は日常的に実行する必要のあるコマンドをたくさん持っていますが、多くの場合、わずかな違いがあります。

今私はそれらをすべて保存して.bash_history使用していますCTRL- Rそれらにアクセスするために、より良い方法があるのだろうかと思います。私が探しているもの:

  • 新しいコマンドを簡単に追加できます
  • 必要なコマンドを簡単に検索して再実行する
  • 提案で不要なコマンドを避ける

残念ながら、bash_historyは3番目の要求に対してそれほど強力ではありません。数回cdとを実行するとls、履歴ファイルがすぐにいっぱいになります。最近HIST_SIZE、重複または特定のコマンドを回避するために履歴を構成できることを学びましたが、すべてを構成する前に、それが最良の方法であることを確認したかったのです。


7
日常のコマンドには、aliasおそらくもっと便利です。例えば。alias gfc="git fetch origin"
number5

回答:


20

次のreadlineコマンドが非常に便利だと思います

history-search-backward,
history-search-forward

(彼らは通常と異なっている注意してくださいreverse-search-historyforward-search-history、に縛らCtrl- 、R- )。CtrlS

私はに関連するこれらのコマンドを持っているCtrl- UpCtrl- Downに以下の行を置きます~/.inputrc

"\e[1;5A": history-search-backward
"\e[1;5B": history-search-forward

動作方法:コマンドの先頭の文字をいくつか書いて、Ctrl- Upを押すと、そのプレフィックスで始まる次の古いコマンドが表示されます。もう一度押すと、次のコマンドが表示されます。満足したら、コマンドを変更した後、を押しEnterて実行します。


1
このために+1を使用します。上矢印キーと下矢印キー(CTRL修飾子なし)にバインドしているだけですが、これは私にとっては有効です。同様にしたい場合は"\e[B": history-search-forward、必要な行があります"\e[A": history-search-backward
サイモン・ウィテカー

また、バッファが十分に大きいことを確認するために、成長HISTFILESIZEおよび/またはHISTSIZE(zshのみがサポートHISTSIZE、bashが両方をサポート)を検討してください。SO質問bash HISTSIZE vs. HISTFILESIZE?さらに照らすことができます。
アダム・カッツ

56

別のヒント:コメントを使用してコマンドをブックマーク/タグ付けすることがあります:

my_command #bookmark

その後:

[ctrl-r]#bookmark

大好きです!
グレッグ

17
バッシュタグ!天才。:
サイモンウィテカー

非常に素晴らしい!これをmysql-cliにも使用します:)
Konerak

それは素晴らしいです!残念ながら、zshellはインタラクティブセッションで#をコメントの開始として扱いません。同様のトリックを知っていますか?
ネイサンロング

1
@NathanLong: $_bookmark。これは、存在しない変数が何も展開しないという事実を悪用する恐ろしいハックであると主張することができますが、スペースが許可されないという警告とともに、確かに動作します(代わりに_を使用します)。
kampu

7

範囲は非常に限られていますが、これら2つの拡張プレースホルダーを指摘したいと思います。

!! 

最後のコマンドのプレースホルダー展開です。sudoコマンドの前に置くのを忘れた場合に便利です。

!$ 

最後のパラメーターを繰り返します。異なるコマンドを繰り返したい場合に便利ですa/very/long/path/name/you/do/not/want/to/type/again


はい、素晴らしいヒント...それらを使用することを覚えていれば:)
Jeach

6

「エイリアス」を使用する

alias これに最適なツールです。

  • 現在のシェルセッションで使用するコマンドラインで簡単に宣言できます。
  • 将来使用する場合は、シェル構成に追加できます。

エイリアスを使用すると、入力したとおりになりますので、非常に柔軟です。たとえば、パイプで使用できます。

alias findfoo="grep 'foo'"
echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo # Does your custom grep

まだ指定していないフラグを渡すことで、「わずかなバリエーション」を実行できるはずです。

echo 'foo1 \n foo2 \n bar1 \n bar2 \n foo3' | findfoo -v # finds non-matches

5

頻繁に使用するコマンドの最小限のシェルスクリプトを作成し、短い名前を付けます。それらはすべて同じ場所に保存され、に追加されPATHます。

そうすれば、非常に複雑なコマンドへのショートカットアクセスがalias可能になり、タスクの変更可能な部分をショートカットのコマンドライン引数に変えることができます。


3
引数を渡すだけの場合は、代わりに関数を定義することを検討してください。完全なスクリプトが必要な場合、これは良い解決策です:)
Konerak

@Konerak私はそれを試さなければなりません。私は通常、スクリプトを作成するだけですが、関数を定義するほうがずっときれいになるでしょう。
ixtmixilix

4

Git.bash_historyのコピーを保持しています。これを簡素化するために、私は設定しました

# don't put duplicate lines in the history
# don't save commands which start with a space
HISTCONTROL=ignoredups:erasedups:ignorespace

# append to the history file, don't overwrite it
shopt -s histappend

bashrcにし、次のコマンド(一般的な使用のために修飾された)でクリーンアップスクリプト

# Ensure a single space at the end of each line to easier add more parameters
sed -i -e 's/ *$/ /' "~/.bash_history"

sort --unique --output="~/.bash_history" "~/.bash_history"

に行を追加する前に実行しgit guiます。履歴ファイルはすべてのコマンドで変更されるため、特定のリポジトリを更新する特別なコマンドもあります。

git stash && git pull && git stash pop

+1を主に言及するために使用しますHISTCONTROL=ignorespace。これは、履歴を乱雑にしないために重要な場合があります。
-quodlibetor

2

ここでの歴史に関する他のすべての答えの中で。

設定しました

HISTFILESIZE=2024
HISTSIZE=1024

〜/ .bash_profile内

他のコメントに加えて、re:history

別の便利な機能...

履歴のリコールを開始する

!first few letters<ESC>Ctrl-E

最初の数文字で始まった最後のコマンドを思い出します

例えば:

!find<ESC>Ctrl-E

GUIを使用しているか、コマンドラインのみを使用しているかについては言及しませんでした。GUIを使用している場合は、永続的なクリップボードマネージャーのいずれかを使用して、よく使用されるコマンド、ユーザーID、パスワード、URLなどをコピー/貼り付けできます。


うわー、!find<ESC>CTRL-E動作しますが、私は明日それを覚えることができるとは思わない。そのESC CTRL-Eとは何ですか?
コネラック

ただ拡張キーへの結合
BSD

0

使用方法Ctrl-Rを学習しCtrl-S、履歴で探しているコマンドを簡単に検索できるようにします。重複を無視し、bash履歴ファイルのサイトを変更するHISTCONTROL環境変数を既に見つけました。

私は通常、多くのやるCtrl-Rが続くがCtrl-E、いくつかのパラメータを変更し、私が打つことで見つかったコマンドをスキップした場合Ctrl-R、1あまりにも多くの時間をCtrl-S救出します。


2
多くの場合、ttyはCtrl-Sが「停止」シーケンスであり、前方検索では(直接)利用できないようにセットアップされます。
エンゾチブ

このような場合、前方検索は<kbd> Ctrl-S </ kbd>以外に再マップできます。
エフゲニー


0

上記の良い答えに加えて、たまたまkdeまたはgnomeに基づくGUIを使用している場合、AutoKeyは驚くほど役立ちます。

https://code.google.com/p/autokey/

いくつかの文字を入力するか、ホットキーを押すことでトリガーされるフレーズを作成できます。これらのフレーズは、入力に置き換えられるか、入力に追加されます。

また、pythonで書かれたスクリプトもサポートしており、pythonを知っていれば、ほとんど何でも実行できます。私はまだpythonを知りませんが、きちんとしたことをするための非常に基本的なスクリプトをすでに入手しています。

すべてがキーボードから来ているように見えるので、キーボード入力を受け入れる任意のアプリケーションで動作します-そして、デスクトップ自体で。

これらをアクティブにする方法と場所を制御する多くのオプションがあるため、コンソールでのみ機能するものと、別のウィンドウでのみ機能するものを使用できます。また、フレーズをトリガーする文字列を入力するとすぐに実行されるようにフレーズを設定したり、OKを与えるまで待つこともできます。


0

他の人が言ったように、エイリアスはあなたの友達です。もう少し複雑なこと(命令と命令の間のどこかに引数が必要な場合)には、.zshrcで次のような関数を使用します。

function ff() { find . -iname "*$**" }

それはlocateのように機能します(何らかの理由でdbが利用できないときに使用します)。または

function chuck() { ps aux | grep $1 | tr -s '\t' ' ' | cut -f2 -d' ' | xargs kill $2 }

killallの代替として。


0

Cntl-Rを振り返るのに使用することに加えて、/のような長いコマンドを置くディレクトリに.bash_historyREADMEファイルがあるので、後で必要になったときにそれらに戻ることができます。同様に、Linux / Ubuntuの新しいバージョンをインストールした後に通常インストールするすべての一般的なパッケージ名を格納するファイルを作成する予定です。そのため、ビデオ、オーディオなどのすべてのディレクトリ内にREADMEファイルを配置し、後で知っておく必要のある一般的なコマンド/ヒントを入れます。~/developgitsvn~/install/README

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