web-dev-qa-db-ja.com

OS X El CapitanでBashセッションを無効にするにはどうすればよいですか

OS X El Capitan(10.11 Beta)の新機能のように見えます Bashセッション(ターミナルセッション) です。 ~/.bash_sessionsディレクトリと履歴ファイル、およびHISTFILEおよびHISTIGNORE envarsはオーバーライドされます。この機能をすべて無効にするにはどうすればよいですか?

36
Whymarrh

この動作は/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を作成することでセッション状態の復元メカニズム全体を無効にできますが、これはセッションごとのコマンド履歴機能を無効にするためだけに不要であり、推奨されません。

26
Chris Page

新しいBashセッションを手動で起動した場合(つまりbash -xl)、ログイン時に実行される内容を確認できます。

出力に次の行が表示されます。

....
+++ '[' '!' -e /Users/username/.bash_sessions_disable ']'

この機能を無効にするには、ホームディレクトリに.bash_sessions_disableファイルを作成できます。

44
Whymarrh

このテーマについてこれまでに書かれたものはすべて正確で有用であり、これに代わって既に述べた手法を使用する必要があります。面白い代替案のためだけに、完全に核のアプローチに言及し、この主題のさらなる理解を広げるつもりです。

この知識を取得した唯一の理由は、~/.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_HISTORY0に設定してセッションベースの履歴を削除し、~/.bash_sessions_disableを作成して.bash_sessionsディレクトリがAppleのたびに作成されないようにしますターミナルが起動します。

核アプローチ

この新しいMacOS機能を排除するための2つの可能な選択肢は、1)/etc/bashrcファイルからその最後の行を削除するか、2)/etc/bashrc_Apple_Terminalの名前を変更または削除することです。

これを実行すると、Appleのターミナルアプリは、Apple以外のターミナルエミュレータと異なる動作をしなくなります。

0
danemacmillan