2017-10-11 9 views
1

私は説明できない非常に奇妙な動作に遭遇しています。私は最近、tmuxのバンドワゴンに飛び乗って、ターミナルウィンドウを開いたときに自動的にtmuxを起動するようにシェル構成を設定しました。.zshrcはtmuxのソースがIntellijでロードされていません

zsh-newuser-install: startup files exist, aborting. 

Use the argument -f if you want to force the function to be run again. 
[email protected] /home/douglasparker% 

は今、私はそれが明確である私自身PS1で、かなり綿密な構成を持っています。同じ頃、私は新しいターミナルセッションを開くと正しくtmuxは発売するバグが、その後ディスプレイをはじめました使用しないでください。しかし、私は単純に実行することによってこの問題を解決することができます:

[email protected] /home/douglasparker% source ~/.zshrc 
[email protected] (~) 
[17-10-11 11:35:59]$ 

だから、単にのzshの実行構成を調達することは、それを修正し、それが自動的にソースが、ただではありませんしなければならないとしても意味がありません、それはすべきすべてのものを、ロードします。

また、これは、Intellijに埋め込まれた端末から最初のtmuxセッションが開始されたときにのみ発生することがわかりました。端末を正常に開くと(Androidスタジオでも)正常に動作し、~/.zshrcが自動的に送信されます。ただし、Intellijから開くと、このバグが特に発生します。興味深いのは、Intellijが最初に開くと、tmuxを開いている後続のターミナルで同じ問題が発生するということです。しかし、最初に別の端末を開いてそのままにしておくと、Intellijで端末を起動すると正しく動作します。

「最初」とは、既存のtmuxサーバーが存在しないことを意味します。すべての開いているtmuxウィンドウを閉じると(tmux lsが「サーバへの接続に失敗しました」など)、次のセッションが汎用端末から来たら、私はうまくいきます。すべて tmux windows再び閉じます。しかし、の最初ののtmuxウィンドウがIntellijから来た場合、このバグが表示され、すべてのtmuxウィンドウを再び終了するまで、すべてのターミナルに戻ります。

#!/bin/bash 

# If this is a raw terminal, just open tmux and then exit 
# The inner session will re-source this script and load the configuration 
if ! { [ "${TERM}" = "screen" ] && [ -n "${TMUX}" ]; } then 
    # Open tmux immediately 
    echo "Sourced ~/.zshrc: Not in tmux" >> tmux.log 
    tmux 
    exit 
else 
    # Must already be within tmux 
    echo "Sourced ~/.zshrc: In tmux" >> tmux.log 
    echo hello 
fi 

このすべては、それがtmuxの範囲内にあるかどうかをチェックされない:

私が見つけたこれを再現するための最小構成は、以下の~/.zshrcファイルです。そうでない場合は、tmuxを開き、tmuxが停止した後に終了します。その内のセッションを開くにはこのスクリプトを2回目に送信し、helloをtmux内のコンソールに出力する必要があります。

そこにはtmuxのセッションが開かれていないと私は(そこは、通常の端末ウィンドウから既存tmuxのセッションであると私はのIntelliJでターミナルを起動した場合の)通常のターミナルウィンドウを起動した場合、私は、予想される出力を得る:

hello 
[email protected] ~% cat tmux.log 
Sourced ~/.zshrc: Not in tmux 
Sourced ~/.zshrc: In tmux 
[email protected] ~% 

そこにはtmuxのセッションが開かれていないと私はのIntelliJ以内にターミナルウィンドウを起動した場合、私は出力を得る:

zsh-newuser-install: startup files exist, aborting. 

Use the argument -f if you want to force the function to be run again. 
[email protected] /home/douglasparker% cat tmux.log 
Sourced ~/.zshrc: Not in tmux 
[email protected] /home/douglasparker% 

これは、すべてのIntelliJでtmuxのセッション内で印刷されます。だから、正しくしかし、それは単にこれらの非常に特定の条件の下でtmuxの内ないソース~/.zshrc二回目を行い、なぜか分からない、一度~/.zshrcファイルを調達し、tmuxは起動されます。

また、シェルを一時的にbashに変更しようとしたところ、問題がでなく、がbashで再現されたことがわかりました。ですから、この問題はzsh、tmux、Intellijの統合から来ているようです。

私はこれが非常に具体的な問題であることを認識していますが、このような問題を引き起こす可能性があることは誰にも分かりますか? zshのエラーを調べても、これの原因を見つけるのに役立つものではありませんでした。 Intellijがこの現象を引き起こす可能性のあるターミナルウィンドウで何か特別なことはありますか? zshがソースを拒否する文書化された理由はありますか~/.zshrc

+1

https://youtrack.jetbrains.com/issue/IDEA-165272を参照してください。 – CrazyCoder

+0

「シェル統合」のチェックを外してください。とにかくそれはまさに何をするのですか?私はこの設定が何をしているのかの説明を見つけることができませんでした。 –

+0

Shell Integrationオプションの説明については、https://www.jetbrains.com/help/idea/terminal.htmlを参照してください。このオプションを選択すると、ターミナルは最初にカスタムrc設定ファイルをロードします(プラグインの下のターミナルフォルダにあります)。 IntelliJ IDEAディストリビューション)を使用して、追加の設定を行い、ユーザーのrcファイルを作成します。現在のところ、Bash/sh(bashrc)、zsh(zshrc)、fishシェル(config.fish)のシェル統合が機能していることに注意してください。 – CrazyCoder

答えて

2

https://youtrack.jetbrains.com/issue/IDEA-165272に基づいて、Intellijで[設定]> [ツール]> [ターミナル]> [シェル統合]のチェックを外してこの問題を解決しました。

私はその設定が実際に何をしているのかわかりませんが、ドキュメントを見つけることはできませんが、この設定を無効にすると問題は解決します。

ありがとうございますCrazyCoder、あなたは救命救助者です!

+0

[公式ドキュメント](https://www.jetbrains.com/help/idea/terminal.html)からは、プロジェクトのローカルの '* rc'ファイルをシェルに渡す方法があります:_このオプションが選択されている場合は、端末はまず、追加の設定を提供するカスタム** rc **設定ファイル(IntelliJ IDEA配布の**プラグイン**の**端末**フォルダにあります)をロードし、次にユーザーの** rc * * file._ – Brice

+0

これはかなり奇妙です。私の問題も解決しました。 'zsh-newuser-install:スタートアップファイルが存在し、中断しています。 関数を強制的に実行する場合は、引数-fを使用します。 'それはさらに奇妙です。しかし、とにかくこれはすべての痛みの問題を修正しました。 –

関連する問題