history
Bashでコマンドを実行していますが、すべてを提供しています...
を実行して、以前に表示されたコマンドの数を制限できることがわかりました。history | tail -n <num-of-lines+1>
ログインしてから実行したコマンドの数と、bashにログインしてから実行したコマンドの数だけを表示する方法はありますか? ?
答え1
特定の情報なしで一般的な数だけを希望する場合をお試しくださいecho $LINENO
。
通訳者はセッションをストリームとして処理し、渡された行数を計算します。これはオリジナルEnterキーを何回押しましたか?
複数行コマンドを入力すると、各行が個別に計算されます。
答え2
興味深い。組み込みの方法はないと思いますが、新しい変数を定義し、各コマンドの後に変数を増やすことができます。たとえば、
$ count=0
$ PROMPT_COMMAND='count=$((count + 1))'
$ echo $count
1
$ echo command
command
$ echo another command
another command
$ echo $count
4
編集する:
PROMPT_COMMAND
または、次のコマンドを使用して、各コマンドの後にレコード形式を変更したり、レコードを保存しない限り、シェルが終了するまでレコードがメモリに保存されることを知っているのと似ています。
diff <(history | sed -E 's,\s+?[0-9]+ ,,') ~/.bash_history
答え3
組み込みコマンドはありません。ちょっとしたトリックを書くことができますが、結果は設定によって異なります。私が考えることができる最も近いものは次のとおりです。
history | tail -n `history | tail -n 1 | awk "{print \\\$1-$HISTSIZE;}"`
エイリアスを指定できます。
コマンドはhistory
その項目を列挙します。ほとんどの場合、$HISTFILE
最大項目($HISTSIZE
値)があります。したがって、上記の番号付きの追加コマンドは、$HISTSIZE
このSSHセッションに入力されたコマンドのリストであることがわかります。
最後の行と最初の列を取得して値を減算する代わりに、履歴を数字で表示して、ログインした後$HISTSIZE
にどのくらいのコマンドがあるかを確認できます。この引数は、履歴の最後の項目数のみを表示する tail -n に送信されます。
$HISTSIZE
残念ながら、履歴がコマンドより少ないと正しく機能しません。より良くするには、.bashrc
ファイルにいくつかの追加設定が必要であるため、ログインするたびに履歴のエントリ数を記憶するように追加の変数が設定されます。次に、その変数を代わりに使用します。$HISTSIZE
答え4
セッションごとの数を計算するには、HISTCMDを使用します。ただし、すべてのbash保存履歴を追跡するため、このシェルインスタンスに渡されたHISTCMDのコピーを保存してから減算します。
存在する~.bashrc
:
OHISTCMD=$HISTCMD
すると、いつでも個数を知りたいとき、
echo $((HISTCMD - OHISTCMD - 1))
マニュアルの注意:
HISTCMD が設定されていないと、後でリセットしても特殊属性が失われます。
そして、上向き矢印を使用して履歴からコマンドを呼び出しても、HISTCMDは増加しません。
ひどいです。グローバル変数history_offset
外部では使用不可!