
Bashのドキュメントではこの質問が見つかりませんので、ここで質問すると答えが得られることを願っています。実行中にスクリプトの履歴を分岐する方法はありますか(つまり、またはをsource
使用せずにスクリプトを呼び出した親プロセスのシェルと同じ履歴を持つ.
)、完了したときに記録を持たないのですか~/.bash_history
?
履歴を記録しない目的は、スクリプトを呼び出す前に最後のコマンドがスクリプトを呼び出した後に最後から2番目のコマンドのみを許可することです。最も簡単な方法は、set -o history
実行されたコマンドの数を記録し、スクリプトの最後からその行を削除すること$HISTFILE
です。
答え1
シェルスクリプトを実行すると、Bashプロセスが起動します非対話型シェル。このモードでは、履歴拡張は実際には発生しません。 Bashのマニュアルページからman bash
:
歴史的拡張
シェルは、cshの履歴拡張と同様の記録拡張機能をサポートしています。このセクションでは、利用可能な構文機能について説明します。この機能は対話型シェルでデフォルトで有効になっており、set組み込みコマンドの+ Hオプションを使用して無効にできます(以下のSHELL BUILTINコマンドを参照)。デフォルトでは、非対話型シェルは履歴拡張を実行しません。
スクリプトがそのコマンドをBash履歴ファイルに保存することには言及していませんが、実際にはそのようなことが発生したことを見たことはありません。
私はあなたが標準的な方法でスクリプトを実行すると仮定します(シェルコマンドを含む実行可能ファイルとして、またはbashコマンドの引数としてスクリプト名を指定することによって)。あなたの質問を正しく説明していない場合は、明確にするために質問を編集してもよろしいですか?