bashシェルで実行すると、history
現在のシェルで入力したすべてのコマンドの履歴だけでなく、以前のシェルで入力したコマンドの履歴も表示されます。現在のシェルでこれまでに入力したコマンドの履歴だけをどのように取得できますか?これは、現在シェルに入力されていることが知られているコマンドを見つけたい場合に便利です。ありがとうございます。
答え1
前提は組織の添付設定されておらず、ゲームをプレイしないプロンプトコマンド、これ歴史このコマンドは次のことができます。
-a「新しい」ヒストリーラインを追加します(入力ヒストリーライン 現在のbashセッションが開始されてから) 歴史的な文書。
私たちが去りたい場合本物履歴ファイルをそのまま維持しながら、次のことができます。
$cat.bash_history #1482030925 エルエス #1482030926 日付 #1482030928 無料 $echo "もう一つのコマンドがあります" 別のコマンド $echo "他のコマンド" その他のコマンド $HISTFILE=foo 履歴-a $猫フー #1482031879 cat.bash_history #1482031887 echo「もう一つのコマンドがあります」 #1482031892 エコ「他の命令」 #1482031899 HISTFILE=foo 記録-a
前のセッションの古いコマンド(ls、date、free)は、「新しい」履歴ファイルには表示されません。foo
- この例ではこれを説明できることを願っています。
別の方法は、現在の履歴ファイルを(ログインセッションの開始時に!)保存し、現在のセッションの履歴を履歴ファイルに追加し(「history -a」を実行またはログアウトして)、2つのファイルを比較することです。
$履歴> hist.backup $echo "新しいコマンド" 新しいコマンド $echo "もう一つのコマンドがあります" 別のコマンド $履歴> hist.current $違いの記録。 {バックアップ、現在} 4a5,7 >5 2016-12-17 19:38:57 echo "新しいコマンド" >6 2016-12-17 19:39:01 echo 「他のコマンドがあります」 > 7 2016-12-17 19:39:07 歴史 > hist.current
注:私は設定HISTTIMEFORMAT='%F %T '
(bash 3、IIRCで導入されました)がとても好きです。タイムスタンプコマンドの実行時期を把握するのに非常に便利です。
答え2
comm
フルレコード(現在のBashセッションを含む)を保存されたレコードと比較し、.bash_history
現在のセッションに関連する行のみを印刷するために使用されます。これは、現在のBashシェルが開始されてから実行されたコマンドのみを表示する必要があります。
comm --nocheck-order -23 <( history | cut -c 8- ) ~/.bash_history