私は説明できない非常に奇妙な動作に遭遇しています。私は最近、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
?
https://youtrack.jetbrains.com/issue/IDEA-165272を参照してください。 – CrazyCoder
「シェル統合」のチェックを外してください。とにかくそれはまさに何をするのですか?私はこの設定が何をしているのかの説明を見つけることができませんでした。 –
Shell Integrationオプションの説明については、https://www.jetbrains.com/help/idea/terminal.htmlを参照してください。このオプションを選択すると、ターミナルは最初にカスタムrc設定ファイルをロードします(プラグインの下のターミナルフォルダにあります)。 IntelliJ IDEAディストリビューション)を使用して、追加の設定を行い、ユーザーのrcファイルを作成します。現在のところ、Bash/sh(bashrc)、zsh(zshrc)、fishシェル(config.fish)のシェル統合が機能していることに注意してください。 – CrazyCoder