67

I tried to write the output of the command php -i to the a file using php -i > info and received the following error:

output is not a tty

What does it mean?

I'm using git bash on Windows.

7

5 Answers 5

67

I found an similar topic like this. One Solution which worked for me:

Write

php.exe -i > info

instead of

php -i > info

So yust append the .exe extension to your commands and it works.

Found this solution here: https://stackoverflow.com/a/44727575/2377961

5
  • Thanks, I've been trying to figure out for a while now why this appeared to sometimes work and sometimes not, and that was the difference!
    – Chris Haas
    Feb 26, 2020 at 18:50
  • 4
    the problem you're encountering is that php is a aliased to winpty php by default when running mintty. php.exe is not aliased, so it won't be launched using winpty. The aliases are setup by default because of compatibility issues, you may encounter those instead when not running winpty.
    – CervEd
    May 19, 2021 at 8:41
  • Thanks! This worked for me with node as well, so: $ node.exe programname.js > output.file
    – Phil Ryan
    Sep 1, 2023 at 1:47
  • Unbelievable, but this really works, thanks Nov 28, 2023 at 18:08
  • @CervEd excellent suggestion, this also worked for me when getting this error pipeing the output of curl to a node script. converted my command to curl.exe {url} | node.exe {script} and it worked great.
    – Lavamantis
    Jan 28 at 22:44
32

If you happen to be using winpty under the hood, you have to pass the -Xallow-non-tty argument to fix this:

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

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

However, if the output is mangled, the -Xplain argument will also be required:

$ 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..
5
  • 1
    Solved the issue for me when using node through conemu.
    – jakub.g
    Sep 19, 2018 at 15:32
  • Thank you so much...This worked for me. Oct 29, 2019 at 23:03
  • 3
    This one should be accepted as the correct solution
    – http8086
    Feb 20, 2020 at 2:32
  • it's a winpty error, git-bash sets up aliases for node ipython php php5 psql python2.7 to use winpty in the script /etc/profile.d/aliases.sh
    – CervEd
    May 19, 2021 at 8:35
  • just logged in to upvote this. With default docker desktop install and git for windows, I can now run docker exec -it from a script with the docker command defined as : DOCKER_COMMAND='winpty -Xallow-non-tty -Xplain docker' Thanks a lot! Note that the options are not needed on the command line in a shell, but apparently inside a script it does. May 21, 2021 at 12:17
24

What worked for me, based on Peh's comments to stackoverflow.com/questions/33622087

If you use C:\Program Files\Git\bin\bash.exe instead of C:\Program Files\Git\git-bash.exe then the command works fine

3
  • 3
    This didn't work for me. I get the same error.
    – Ryan
    Jan 20, 2017 at 15:07
  • 1
    But it worked for me today! I don't know why it didn't work a few months ago. +1
    – Ryan
    Apr 3, 2017 at 23:37
  • 2
    just type bash inside git bash
    – Rivenfall
    Jul 5, 2019 at 12:06
3

I believe this issue is more about how Git Bash handles piping, and less about PHP, because I encountered the same symptom using Python on Windows. The currently most-voted answer does not work for me. It might work a few months later, based on this comment and a follow-up comment. But I'm impatient so I choose to use the native Windows Command Prompt and, voila, it works!

DOESN'T WORK in Git Bash

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

WORKS in Command Prompt

(env27) C:\Users\rayluo>python -c "print('hello world')" > test.txt
(env27) C:\Users\rayluo>type test.txt
hello world
1

You are redirecting you output from your terminal (tty) to a file. Therefore your output is no longer a tty.

The message makes perfect sense. However this should not be an error.

I cannot reproduce this behavior on a linux system.

1
  • Sorry, i did comment on the wrong place. please run "strace php -i" and paste the output (last few lines at first).
    – gerhard d.
    Dec 10, 2015 at 10:11

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .