web-dev-qa-db-ja.com

頻繁に使用するコマンドをすばやく保存してアクセスするにはどうすればよいですか?

日常的に実行する必要のあるコマンドがたくさんありますが、ほとんど変化はありません。

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

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

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

38
Konerak

私は次のreadlineコマンドがとても便利だと思います

history-search-backward,
history-search-forward

(通常のreverse-search-historyforward-search-historyとは異なることに注意してください。 Ctrl-R、 Ctrl-S)。

これらのコマンドが関連付けられています Ctrl-Up そして Ctrl-Down 次の行を~/.inputrcに入れます。

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

仕組み:コマンドの最初の数文字を入力し、 Ctrl-Up そのプレフィックスで始まる次の古いコマンドが表示され、もう一度押すと次のコマンドが表示されます。満足したら、コマンドを変更した後、を押します。 Enter 実行します。

21
enzotib

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

my_command #bookmark

次に:

[ctrl-r]#bookmark
59
Chris J

「エイリアス」を使用

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
7
Nathan Long

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

!! 

最後のコマンドのプレースホルダー展開です。コマンドの前にSudoを付けるのを忘れた場合に役立ちます。

!$ 

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

7
chiborg

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

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

5

。bash_history in Git のコピーを保持しています。これを簡単にするために、

# 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
4
l0b0

ここで歴史を含む他のすべての答えの中で。

私は設定しました

HISTFILESIZE=2024
HISTSIZE=1024

〜/ .bash_profile内

他のコメントに加えて:歴史

別の便利な機能...

歴史の想起を

!first few letters<ESC>Ctrl-E

最初の数文字で始まる最後のコマンドを呼び出します

例えば:

!find<ESC>Ctrl-E

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

2
bsd

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

私は通常たくさんします Ctrl-R に続く Ctrl-E ヒットして見つかったコマンドをスキップした場合、いくつかのパラメータを変更します Ctrl-R あまりにも多く、 Ctrl-S 救助へ。

0
Evgeny

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

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

これはロケートのように機能します(何らかの理由でdbが使用できない場合に使用します)。または

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

killallの代わりに。

0
rkj

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

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

いくつかの文字を入力するか、ホットキーを押すことによってトリガーされるフレーズを作成できます。これらのフレーズは、入力の代わりになるか、入力に追加されます。

また、pythonで記述されたスクリプトをサポートしています。Pythonを知っていれば、ほとんど何でもできます。pythonはまだわかりませんが、すでに知っています。きちんとしたことをするためにいくつかの非常に基本的なスクリプトを取得します。

すべてがキーボードから送信されているように見えるため、キーボード入力を受け入れるすべてのアプリケーション、およびデスクトップ自体で動作します。

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

0
Joe

私は常に最後に使用したコマンドとその出力を保存することを好みます。

script filename
0

使用に追加 Cntl-R.bash_history、README ~/developディレクトリgit/svnのように長いコマンドを置くため、後で必要になったときにそれらに戻ることができます。同様に、~/install/READMEファイルには、新しいバージョンのLinux/Ubuntuをインストールした後に通常インストールするすべての共通パッケージ名を入れます。つまり、アイデアはすべてのディレクトリ内にREADMEファイル、たとえばビデオ、オーディオなど)を置き、後で知る必要があるかもしれない共通のコマンド/ヒントをそれらに入れることです。

0
Amr