ターミナルが設定を尊重しないのはなぜですか?

Dec 10 2020

先週のある時点で、私のターミナルは「新しいタブを開く:同じ作業ディレクトリ」設定を尊重しなくなりました。「新しいウィンドウ...」でテストしても同じ結果が得られました。

私のシェルはzshです。

ここでDanRosenstarkからの回答に従うことで、これを機能せることができました。 https://apple.stackexchange.com/a/340778/398648

# http://superuser.com/a/315029/4952
# Set Apple Terminal.app to resume directory... still necessary 2018-10-26
if [[ $TERM_PROGRAM == "Apple_Terminal" ]] && [[ -z "$INSIDE_EMACS" ]] {
  function chpwd {
    local SEARCH=' '
    local REPLACE='%20'
    local PWD_URL="file://$HOSTNAME${PWD//$SEARCH/$REPLACE}"
    printf '\e]7;%s\a' "$PWD_URL"
  }
  chpwd
}

しかし:どうすればこれを自分で判断できたのか、または同様の問題をどのようにデバッグできたのかわかりません

ターミナルのこれらの最初のステップが何であるかを理解するためのヒントやコツをいただければ幸いです。

うまくいかなかったこと:

  • 新しいタブまたは新しいウィンドウの設定を切り替える
  • 、ファイルのreturn最初の行で名前を変更または追加する.zshrc.zsh*
  • 現在の作業ディレクトリの[新しいターミナルを開く]タブのすべての提案が機能しない

その他の潜在的に有用な情報:

  • 「同じプロファイル」/「デフォルトプロファイル」の設定は、変更されたときに尊重されます
  • pwdの最初の行として追加すると、.zshrcディレクトリはすでに存在します/home/<myuser>
  • nix最近(を含むnix-darwin)に関連するいくつかのツールとプロジェクトをインストールおよびアンインストールしました

メタデータ:

OS        macOS Catalina 10.15.7 (19H2)
Terminal  2.10 (433)
zsh       5.7.1 (x86_64-apple-darwin19.0)

回答

3 MarlonRichert Dec 28 2020 at 03:43

そのスクリーンショットの「エスケープシーケンス…」をクリックすると、次のように表示されます。

ただし、これからはわかりませんが、これは通常/etc/zshrc_Apple_Terminal、から呼び出されるファイルで処理され/etc/zshrcます。/etc/zshrc_Apple_Terminal呼び出されないようにしたり、実行しようとしていることをオーバーライドしたりできることがいくつかあります。

  • Zshをzsh -dまたはで開始していzsh -fます。
  • あなたはファイルを持っている${ZDOTDIR:-$HOME}/.zshenv${ZDOTDIR:-$HOME}/.zprofile、あなたが持っているsetopt NO_rcsまたはsetopt NO_globalrcs
  • パラメータに値$TERM_PROGRAMがありませんApple_Terminal
  • Zshにはへの読み取りアクセス権がありません/etc/zshrc_Apple_Terminal
  • /etc/zshrc_Apple_Terminalソースを取得するとき、パラメーター$INSIDE_EMACSはゼロ以外です。
  • ソース取得した後のprecmdある時点で関数を定義します。これにより、で定義された関数がオーバーライドされます。 /etc/zshrc_Apple_Terminaladd-zsh-hook

デバッグするためにできること:

  • 非グローバル構成ファイルなしでサブシェルを開始し、そこでもバグが発生するかどうかを確認します。
    cd $(mktemp -d); HOME=$PWD ZDOTDIR=$PWD zsh
    
    このサブシェルで問題が発生しない場合は、問題が非グローバルドットファイルのどこかにあることを意味します。これらのファイルのリストを取得するには、
    ls ${ZDOTDIR:-$HOME}/.z(log(in|out)|profile|sh(env|rc))(-^/)
    
  • でZshを再起動exec zsh -vxし、最初から出力を調べて、/etc/zshrc_Apple_Terminalソースが取得されるかどうか、および後でprecmd設定されたフックをオーバーライドするものがあるかどうかを確認します。