「出力が tty ではありません」エラーはどういう意味ですか?

「出力が tty ではありません」エラーはどういう意味ですか?

コマンドの出力をphp -iファイルに書き込もうとしましたphp -i > infoが、次のエラーが発生しました。

output is not a tty

それはどういう意味ですか?

git bashWindowsで使用しています。

答え1

これに似たトピックを見つけました。私にとってうまくいった解決策の 1 つ:

書く

php.exe -i > info

の代わりに

php -i > info

したがって、.exeコマンドに拡張子を追加するだけで機能します。

ここでこの解決策を見つけました:https://stackoverflow.com/a/44727575/2377961

答え2

内部で winpty を使用している場合は、-Xallow-non-ttyこれを修正するために引数を渡す必要があります。

$ winpty python -c 'print("hello")' | grep h
stdout is not a tty

$ winpty -Xallow-non-tty python -c 'print("hello")' | grep h
hello

ただし、出力が壊れている場合は、引数-Xplainも必要になります。

$ winpty -Xallow-non-tty python -c 'print("hello")' | xxd
00000000: 1b5b 306d 1b5b 304b 6865 6c6c 6f1b 5b30  .[0m.[0Khello.[0
00000010: 4b1b 5b3f 3235 6c0d 0a1b 5b30 4b1b 5b3f  K.[?25l...[0K.[?
00000020: 3235 68                                  25h

$ winpty -Xallow-non-tty -Xplain python -c 'print("hello")' | xxd
00000000: 6865 6c6c 6f0d 0a                        hello..

答え3

stackoverflow.com/questions/33622087 への Peh のコメントに基づいて、私にとってうまくいったこと

C:\Program Files\Git\git-bash.exe の代わりに C:\Program Files\Git\bin\bash.exe を使用すると、コマンドは正常に動作します。

答え4

出力を端末 (tty) からファイルにリダイレクトしています。したがって、出力はもはや tty ではありません。

メッセージは完全に意味を成しています。ただし、これはエラーではありません。

この動作を Linux システムで再現することはできません。

関連情報