再起動時にMacターミナルで作業ディレクトリを復元する方法


16

私は、それぞれが異なる作業ディレクトリに割り当てられたタブでいっぱいのMacターミナルを使用しています。同じ作業ディレクトリで新しいウィンドウを開くように構成しました。それにもかかわらず、ターミナルを終了して再起動すると、すべてのタブとその名前が再構築され、ウィンドウの最後の出力も表示されますが、ユーザーのホームディレクトリに残り、各タブの最新の作業ディレクトリは復元されません。

何が間違っていますか?これは、の設定によって引き起こされる可能性があり~/.bash_profileますか?


このスレッドで探しているものを見つけることができると思います。apple.stackexchange.com/questions/863/...
dhempler

1
だから、これがすぐにサポートされるべきだと仮定するのは間違っていますか?
オリバードロトボーム

回答:


15

(参考として、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

1
返信いただきありがとうございますが、私はそれを機能させることができないようです。削除しました.bashrc(プロンプトコマンドのカスタマイズを見つけることができませんでしたが、次の操作を行います。1.新しいターミナルウィンドウを開きます(ユーザーのホームディレクトリで開きます)ウィンドウが再び開き、ディレクトリ変更の出力が表示されますが、ユーザーのホームディレクトリに残っています
Oliver Drotbohm

@OliverGierkeターミナルもそうかどうかを確認、ログインシェルを作成し~/.bash_profile~/.bash_login、と~/.profile
クリスページ

後者の2つはありませんが、前者は~/.bashrc回答の提案に従って実行されます。
オリバードロトボム

2
クリス、わかった。私/etc/bashrcはインストールスクリプトなどによって微調整されたようです。ありました/etc/bashrc.orig(私は、元の設定であることを前提とし)いくつかの追加設定含まれるgist.github.com/3273170を/etc/bashrc期待通りに動作するものに再び追加します。助けと忍耐に感謝します!
オリバードロトボム

.bashrcの$ PROMPT_COMMANDは変更せず、システムのデフォルトは/ etc / bashrcのみです。さらに提案はありますか?
リチャード

3

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


1

この答えを見つける前に、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スペースのみをエスケープするコストで、以外の外部プログラムを使用しません。他の特殊文字をエスケープする必要がある場合は、より包括的なソリューションを見つけるために少し努力する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.