[-t 1]何を確認する必要がありますか?

[-t 1]何を確認する必要がありますか?

Windowsからブートするときに、zshブート方法を見つけました。bash

https://www.howtogeek.com/258518/how-to-use-zsh-or-another-shell-in-windows-10/

最後に、次のコードを追加することをお勧めします.bashrc

# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi

どういう意味ですか[ -t 1 ]

これは本当ですか?

それで、私ができることはすべてありますか?

exec zsh

答え1

[]testコマンドのショートカットです。

によるとman test

-t FD
FD が端末に関連付けられたファイル記述子であれば真。

したがって、bashを対話型シェルとして実行すると(ターミナル - 参照)これ用語説明スレッド)、bashはzshに置き換えられます。

.bash* ファイルに関する追加情報:

bashを次のように使用するとき対話型ログインシェルまたは --loginオプションを持つ非対話型シェルまず、/ etc / profileファイル(ファイルが存在する場合)からコマンドを読み取り、実行します。ファイルを読み込んだら、~/.bash_profile、~/.bash_login、~/.profile を順番に探して、存在して読み取れる最初のファイルからコマンドを読み込んで実行します。この動作は、シェルの起動時に --noprofile オプションを使用して無効にできます。

いつログインシェルの終了、bashは〜/ .bash_logoutファイルと/ etc / bash.bash_logoutファイル(これらのファイルがある場合)からコマンドを読み取り、実行します。

いつ ログインシェルではなく対話型シェル起動後、bashはコマンドを読み込み、実行します。~/.bashrc、ファイルが存在する場合。 --norcオプションを使用してこれを無効にできます。 --rcfile file オプションは、 bash が ~/.bashrc の代わりにファイルからコマンドを読み込んで実行するように強制します。

スティーブン・チャゼラスは次のように語っています。
シェルはstdoutがターミナルにならずに対話することができ、シェルはstdoutで非対話式にターミナルと対話することができます(たとえば、出力を(ユーザーbash.bashrcログインシェルを持つホストシステムでssh host cmd)シェルが対話型であるかどうかをテストする正しい方法です。bashbash --login -c 'some code'case $- in *i*)...

答え2

これテストコマンド [ -t 1 ]bash 出力が端末にあることを確認します。この行の目的は、端末が開いているときに他のbashの使用を妨げることなくzshを実行することです。しかし、それはひどく行われました。

ファイルは.bashrc3つの状況で読み取られます。

  • Bashが対話型シェルとして実行されると、バッチコマンドを実行するのではなく、ユーザーが入力したコマンドを実行します。
  • バッシュがあるとき非対話型RSHまたはSSHデーモンによって実行されるシェル(通常は実行中で、ssh host.example.com somecommandbashがログインシェルであるためhost.example.com)。
  • たとえば、ユーザーの.bash_profileBashの起動ファイルの選択は少し奇妙です。)。

[ -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アプリケーションを開きます。

答え3

人1テスト:

-tFD

ファイル記述子FDが端末で開きます。

あなたの例はon ifを使用して実行されます(この場合は実行中のプロセスを置き換えますbash)。zsh標準出力ターミナルで開きます(ファイル/パイプなどではありません)。

関連情報