OS X El Capitan(10.11 Beta)の新機能のように見えます Bashセッション(ターミナルセッション) です。 ~/.bash_sessions
ディレクトリと履歴ファイル、およびHISTFILE
およびHISTIGNORE
envarsはオーバーライドされます。この機能をすべて無効にするにはどうすればよいですか?
この動作は/etc/bashrc_Apple_Terminal
で定義されています。実行内容とカスタマイズ方法を説明するドキュメントコメントが含まれています。
ここで説明するように、Shell_SESSION_HISTORY=0
スクリプトで~/.bashrc
を設定することにより、端末セッションごとのコマンド履歴機能を無効にできます。
Shell_SESSION_HISTORYを0に設定することにより、この動作を無効にし、単一の履歴を共有できます。各プロンプトで履歴を操作することにより、実行中のシェル間で新しいコマンドを共有するように調整する一般的なユーザーカスタマイズがいくつかあり、通常は「shopt -s histappend」が含まれますしたがって、histappend Shellオプションが有効になっている場合、セッションごとの履歴はデフォルトで無効になっています。 Shell_SESSION_HISTORYを1に設定して、明示的に有効にすることができます。
~/.bash_sessions_disable
を作成することでセッション状態の復元メカニズム全体を無効にできますが、これはセッションごとのコマンド履歴機能を無効にするためだけに不要であり、推奨されません。
新しいBashセッションを手動で起動した場合(つまりbash -xl
)、ログイン時に実行される内容を確認できます。
出力に次の行が表示されます。
....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'
この機能を無効にするには、ホームディレクトリに.bash_sessions_disable
ファイルを作成できます。
このテーマについてこれまでに書かれたものはすべて正確で有用であり、これに代わって既に述べた手法を使用する必要があります。面白い代替案のためだけに、完全に核のアプローチに言及し、この主題のさらなる理解を広げるつもりです。
この知識を取得した唯一の理由は、~/.bash_sessions_disable
ファイルを作成する必要のある代替ソリューションを探していたからです。代わりに、既存の~/.bash_profile
にいくつかの行を追加するだけで、セッションの動作が発生しないようにしたいと思います。残念ながら、それは核にならない限り不可能なので、公式の答えは依然として最良のアプローチです。
概要
MacOSでBashを最初に起動すると、最初に/etc/profile
がソースになり、次に/etc/bashrc
がソースになります。そのファイルの内容には次の行が含まれます。
[ -r "/etc/bashrc_$TERM_PROGRAM" ] && . "/etc/bashrc_$TERM_PROGRAM"
$TERM_PROGRAM
環境変数は、Appleのターミナルアプリによってのみ設定されます。その変数の値を出力すると、Apple_Terminal
が返されます。言い換えると、/etc/bashrc
ファイルは、/etc/bashrc_Apple_Terminal
ファイルが存在し、読み取り可能な場合、そのソースを取得しようとしています。 MacOSが特別なBashセッション処理を行ってOSの再開機能に結び付けるのは、このファイル内です。
その後、Bashはユーザーが自分のホームディレクトリにある構成(~/.bash_profile
や~/.bashrc
など)をソースします。これは述べられていますが、純粋に構成レベルで/etc/bashrc_Apple_Terminal
ファイルで行われたすべての作業をオーバーライドする方法はありません(構成と新しいファイルの作成)つまり、$Shell_SESSION_HISTORY
を0
に設定してセッションベースの履歴を削除し、~/.bash_sessions_disable
を作成して.bash_sessions
ディレクトリがAppleのたびに作成されないようにしますターミナルが起動します。
核アプローチ
この新しいMacOS機能を排除するための2つの可能な選択肢は、1)/etc/bashrc
ファイルからその最後の行を削除するか、2)/etc/bashrc_Apple_Terminal
の名前を変更または削除することです。
これを実行すると、Appleのターミナルアプリは、Apple以外のターミナルエミュレータと異なる動作をしなくなります。