テストコマンド [ -t 1 ]はbashの出力が端末であるかどうかをチェックします。この行の目的は、bashの他の使用を中断することなく、ターミナルを開くときにzshを実行することです。しかし、それは非常に悪いことです。
ファイル.bashrcは次の3つの状況で読み取られます。
- bashが対話型シェルとして実行される場合、つまり、バッチコマンドを実行するのではなく、ユーザーが入力したコマンドを実行する場合。
- bashがRSHまたはSSHデーモンによって実行される非対話型シェルである場合(通常、実行
ssh host.example.com somecommandしていてbashがログインシェルであるためhost.example.com)。
- ユーザーの場合など、明示的に呼び出されたとき
.bash_profile(bashのスタートアップファイルの選択は少し奇妙です)。
[ -t 1 ]対話型シェルを検出する方法としては不十分です。端末に行かずに標準出力でbashを対話的に実行することは可能ですが、まれです。標準出力を非対話式シェルの端末に送るのがより一般的です。非対話型シェルには実行中のビジネスはありません.bashrcが、残念ながらSSHによって呼び出されるbashシェルは実行します。より良い方法があります:bash(および他のshスタイルのシェル)は、それを行うための信頼できる組み込みの方法を提供します。
case $- in
*i*) echo this shell is interactive;;
*) echo this shell is not interactive;;
esac
したがって、「これが対話型シェルである場合はzshを起動する」と記述する必要があります
case $- in
*i*) exec zsh;;
esac
しかし、それでも良い考えではありません。これは、bashシェルを開くことを防ぎます。これは、zshを使用している場合でも便利です。このブログ投稿を忘れて、代わりにターミナルを開いてbashの代わりにzshを実行するショートカットを設定するだけです。「WindowsでBashアプリケーションを開くたびに、Zshシェルで起動する」ように整理しないでください。zshが必要な場合は、Zshアプリケーションを開きます。
bash読み取ることができます.bashrcインタラクティブ(のようにssh host cmdここでbashホスト上のユーザのログインシェルであり、又はbash --login -c 'some code'ここ.bash_profile源.bashrc)。case $- in *i*)...シェルがインタラクティブかどうかをテストする正しい方法です。