Bashシェルを使用して分析を実行しているとき、私がよく使用するコマンドを同じディレクトリ(私の「LOGBOOK」と呼ばれる)のファイルに保存して、私はそれらの結果を得るためにやった。これまでのところ、これは私が端末からコマンドをコピーして貼り付けるか、「上」を押してコマンドをecho"my command" >> LOGBOOK
または他の同様のふざけた態度に変更することを意味しています。
先日、history
ツールがあることがわかりましたが、以前に実行したコマンドを取得してgetlast >> LOGBOOK
のようなことができるようにするためのツールが見つかりません。
これを行う簡単な方法はありますか?または、他のユーザーは、コマンドの結果を保存するためにどのように対処しますか?
bash
を使用している場合は、fc
コマンドを使用して、希望する方法で履歴を表示できます。
fc -ln -1
最後のコマンドが出力されます。 -l
はリストを意味し、-n
は行にコマンド番号をプレフィックスしないことを意味し、-1
は最後のコマンドのみを表示することを意味します。行の先頭の空白(複数行コマンドの最初の行のみ)が煩わしい場合は、sed
を使用して簡単に削除できます。それをシェル関数にすると、要求に応じて解決策が得られます(getlast >> LOGBOOK
):
getlast() {
fc -ln "$1" "$1" | sed '1s/^[[:space:]]*//'
}
それはあなたがあなたの質問で尋ねたように機能するはずです。
fc
コマンドに"$1" "$1"
を追加して、わずかなバリエーションを追加しました。これにより、たとえば、getlast mycommand
と言って、mycommand
を呼び出す最後のコマンドラインを出力できます。そのため、別のコマンドを実行する前に保存するのを忘れた場合でも、最後のインスタンスを簡単に保存できます。コマンド。 getlast
に引数を渡さない場合(つまり、fc
をfc -ln "" ""
として呼び出すと、最後のコマンドのみが出力されます)。
[注:@Bramのコメントと@glenn jackmanの回答で言及されている問題を考慮して編集された回答。]
@camhの答えの1つの問題は、複数の行にまたがるコマンドがある場合、最初の行しか表示されないことです。
$ echo "one
> two
> three"
one
two
three
$ fc -lnr | head -1
echo "one
これを試して:
$ alias getlast='fc -nl $((HISTCMD - 1))'
$ echo "one
> two
> three"
one
two
three
$ getlast
echo "one
two
three"
上矢印を使用する代わりに、"!!"
を使用して前のコマンドを参照できます。
例えば.
$ some -long --command --difficulty="very hard to remember"
$ echo "!!" >> LOGBOOK
注:これはリテラルテキストを引用しません
Bashシェルを使用している場合は、次のコマンドでこれを行うことができます。
$> history -a LOGBOOK
これにより、現在のセッションのすべてのコマンドがそのファイルに追加されます。〜/ .bashrcファイルにエイリアスを追加して、単一のコマンドでこれを行うこともできます。
$> alias getlast="history -a LOGBOOK"