質問: ### 前提・実現したいこと シェルスクリプトで.bash_historyにあるコマンド履歴を加工して別ファイルに出力したいです。 ### 発生している問題・エラーメッセージ 以下のコードをターミナル上で実行すると、.bash_historyをhoge.txtに出力できるのですが、 ``` history | awk '{print $2 | "sort | uniq -c | sort -r | head -10 >> hoge.txt"}' ``` これをシェルスクリプト 上で実装させると、 スクリプト内で実行されたコマンドが加工されてファイルに出力されます。 ### 試したこと historyのオプションを追加して、スクリプトを実行しましたが解決しませんでした。 ``` history -r (読込ファイル) history -r (path) | awk '{print $2 | "sort | uniq -c | sort -r | head -10 >> hoge.txt"}' ```
回答: ヒストリーはメモリー上で保持されますが、子シェルには伝搬しません。 また、メモリーから`.bash_history`に書き込まれるのシェルが終了するときです。 `.bash_history`ファイルを直接読むことで、前回シェルが終了した時点までのヒストリーを参照できます。 今この直前までに実行したコマンドを対象にしたければ、シェルスクリプトにせず、`alias`や関数にするのがいいです。