私は、それぞれが異なる作業ディレクトリに割り当てられたタブでいっぱいのMacターミナルを使用しています。同じ作業ディレクトリで新しいウィンドウを開くように構成しました。それにもかかわらず、ターミナルを終了して再起動すると、すべてのタブとその名前が再構築され、ウィンドウの最後の出力も表示されますが、ユーザーのホームディレクトリに残り、各タブの最新の作業ディレクトリは復元されません。
何が間違っていますか?これは、の設定によって引き起こされる可能性があり~/.bash_profile
ますか?
私は、それぞれが異なる作業ディレクトリに割り当てられたタブでいっぱいのMacターミナルを使用しています。同じ作業ディレクトリで新しいウィンドウを開くように構成しました。それにもかかわらず、ターミナルを終了して再起動すると、すべてのタブとその名前が再構築され、ウィンドウの最後の出力も表示されますが、ユーザーのホームディレクトリに残り、各タブの最新の作業ディレクトリは復元されません。
何が間違っていますか?これは、の設定によって引き起こされる可能性があり~/.bash_profile
ますか?
回答:
(参考として、Mac OS X Lion 10.7以降の再開機能について説明しています。)
デフォルトのシェルbashを使用している場合、ターミナルは作業ディレクトリを自動的に復元します。他のシェルを使用している場合は、コードを適合させて/etc/bashrc
エスケープシーケンスを送信し、作業ディレクトリをターミナルに通信して、後で再開するためにディレクトリを復元できるようにする必要があります。zshを使用している場合は、Zshターミナルの再開(OS X Lion)に対する私の回答をご覧ください。zshの適切なコードが含まれています。
カスタムがある場合、~/.bash_profile
またはのカスタマイズを~/.bashrc
変更してデフォルトの動作を取り消さないようにする必要がある場合/etc/bashrc
。特に、PROMPT_COMMAND
環境変数を設定して、各プロンプトでエスケープシーケンスを送信します。その変数をカスタマイズする場合、現在の値にコードを接頭辞または追加する必要があります。例:
PROMPT_COMMAND="<your code here>;$PROMPT_COMMAND"
また、一般的に、~/.bash_profile
実行する必要があり~/.bashrc
ます:
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
.bashrc
(プロンプトコマンドのカスタマイズを見つけることができませんでしたが、次の操作を行います。1.新しいターミナルウィンドウを開きます(ユーザーのホームディレクトリで開きます)ウィンドウが再び開き、ディレクトリ変更の出力が表示されますが、ユーザーのホームディレクトリに残っています
~/.bash_profile
、~/.bash_login
、と~/.profile
。
~/.bashrc
回答の提案に従って実行されます。
/etc/bashrc
はインストールスクリプトなどによって微調整されたようです。ありました/etc/bashrc.orig
(私は、元の設定であることを前提とし)いくつかの追加設定含まれるgist.github.com/3273170を。/etc/bashrc
期待通りに動作するものに再び追加します。助けと忍耐に感謝します!
Bash-Itを使用している場合は、Bash-It $PROMPT_COMMAND
によって上書きされる問題が発生する可能性があります。
前述のように、新しいタブでcwdを復元するためにOS Xによって使用されます。bashは値を追加する必要がありますが、それらをオーバーライドする必要はありません。
ただし、現時点での回避策は、次の行を ~/.bash_profile
source $BASH_IT/bash_it.sh
export PROMPT_COMMAND="$PROMPT_COMMAND;update_terminal_cwd;"
詳細については、更新プログラムの問題トラッカーをご覧ください:https : //github.com/revans/bash-it/issues/240
Appleのリファレンス https://developer.apple.com/library/mac/documentation/darwin/reference/manpages/man1/sh.1.html
この答えを見つける前に、csh / tcshでこれを行う方法に関するブログ投稿を書きました。他の誰かがこれらのシェルのソリューションを探してここに来た場合、ここにあります:
if ("$?TERM_PROGRAM") then
if ("$TERM_PROGRAM" == "Apple_Terminal") then
alias precmd 'printf "\033]7;%s\a" "file://$host$cwd:ags/ /%20/"'
endif
endif
.cshrc
または必要.tcshrc
に応じて追加します。(外部のifステートメントは、sshのように、リモートログイン時のエラーを回避するために必要です。tcshの変数展開規則のため、別個のステートメントである必要があります。)
Appleのビルトインbashサポートと同様に、このソリューションでは、printf
スペースのみをエスケープするコストで、以外の外部プログラムを使用しません。他の特殊文字をエスケープする必要がある場合は、より包括的なソリューションを見つけるために少し努力する必要があります。