Co oznacza błąd „wynik nie jest tty”?

32

Próbowałem zapisać dane wyjściowe polecenia php -iw pliku za pomocą php -i > infoi otrzymałem następujący błąd:

output is not a tty

Co to znaczy?

Używam git bashw systemie Windows.

Maxim Koretskyi
źródło
Hmm .. Czy w katalogu, w którym uruchamiasz polecenie, jest już plik lub katalog o nazwie „info”?
nie, ale po uruchomieniu polecenia jest on tworzony, tylko pusty i generowany jest błąd
Maxim Koretskyi
Spróbuj użyć „strace php -i> info”, a następnie opublikuj wynik tutaj ..
Jakiej wersji php używasz? Czy polecenie utworzyło plik informacyjny poprawnie?
michas,
1
Nie mam teraz czasu, aby napisać odpowiedź na to pytanie, ale jeśli ktoś chce odpowiedzieć na kod.google.com/p/mintty/issues/detail?id=56 , homepage.ntlworld.com ./jonathan.deboynepollard/FGA/… , github.com/git-for-windows/git/issues/399 , github.com/rprichard/winpty i github.com/docker/toolbox/issues/231 w ręce i biegnij z nimi, proszę czuć się swobodnie.
JdeBP,

Odpowiedzi:

19

Co dla mnie zadziałało, na podstawie komentarzy Peha do stackoverflow.com/questions/33622087

Jeśli użyjesz C: \ Program Files \ Git \ bin \ bash.exe zamiast C: \ Program Files \ Git \ git-bash.exe, to polecenie działa dobrze

celowanie
źródło
3
To mi nie zadziałało. Otrzymuję ten sam błąd.
Ryan,
1
Ale dzisiaj zadziałało dla mnie! Nie wiem, dlaczego to nie zadziałało kilka miesięcy temu. +1
Ryan,
1
po prostu wpisz bash wewnątrz git bash
Rivenfall
18

Znalazłem podobny temat jak ten. Jedno rozwiązanie, które działało dla mnie:

pisać

php.exe -i > info

zamiast

php -i > info

Więc dodaj .exerozszerzenie do swoich poleceń i działa.

Znaleziono to rozwiązanie tutaj: /programming//a/44727575/2377961

Radon8472
źródło
12

Jeśli używasz winpty pod maską, musisz przekazać -Xallow-non-ttyargument, aby to naprawić:

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

$ winpty -Xallow-non-tty python -c 'print("hello")' | grep h
hello
Chiel ten Brinke
źródło
1
Rozwiązałem problem dla mnie podczas korzystania nodez conemu.
jakub.g,
Dziękuję bardzo ... To zadziałało dla mnie.
HassanSh__3571619
2

Wierzę, że ten problem dotyczy bardziej tego, jak Git Bash obsługuje piping, a mniej PHP, ponieważ napotkałem ten sam symptom przy użyciu Pythona w systemie Windows. Obecnie najbardziej głosowało odpowiedź nie działa dla mnie. Może to działać kilka miesięcy później, w oparciu o ten komentarz i komentarz uzupełniający . Ale jestem niecierpliwy, więc wybrałem natywny wiersz polecenia systemu Windows i, voila, działa!

NIE DZIAŁA w Git Bash

rayluo@DESKTOP-10B0N4G MINGW64 ~
$ python -c "print('hello world')" > test.txt
stdout is not a tty

DZIAŁA w wierszu polecenia

(env27) C:\Users\rayluo>python -c "print('hello world')" > test.txt
(env27) C:\Users\rayluo>type test.txt
hello world
RayLuo
źródło
1

Przekierowujesz dane wyjściowe z terminala (tty) do pliku. Dlatego twój wynik nie jest już tty.

Wiadomość ma doskonały sens. Jednak nie powinien to być błąd.

Nie mogę odtworzyć tego zachowania w systemie Linux.

michas
źródło
Przepraszam, skomentowałem niewłaściwe miejsce. uruchom „strace php -i” i wklej dane wyjściowe (najpierw kilka ostatnich linii).