Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

stdout is not a tty on git bash on Windows #305

Open
allevo opened this issue Feb 24, 2022 · 17 comments
Open

stdout is not a tty on git bash on Windows #305

allevo opened this issue Feb 24, 2022 · 17 comments

Comments

@allevo
Copy link
Contributor

allevo commented Feb 24, 2022

Hi,
I tried to run the below command in git bash under Windows 11 and an error is shown as described below.

$ node http-fastify-complete.mjs | pino-pretty
stdout is not a tty

In fact the git bash is not a tty as desccribed below.

$ node -e 'console.log(tty.isatty())'
false

Is there any change to use pino-pretty in git bash?

Thanks

@mcollina
Copy link
Member

Have you tracked down where that error come from? I don't think it comes from pino-pretty.

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

you are right.

$ echo 'foo' | pino-pretty
foo

works fine.

so, probable it is a problem of node itself?

@mcollina
Copy link
Member

I don't know to be honest. Maybe something in the http-fastify-complete example?

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

I don't think so

$ node -e 'console.log(666)' | pino-pretty
stdout is not a tty

@mcollina
Copy link
Member

Does node -e 'console.log(666)' work?

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

yes

$ node -e 'console.log(666)'
666

@mcollina
Copy link
Member

Unfortunately I do not have a windows machine to debug this :(. If it's on pino or pino-pretty, could you send a PR?

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

seems to be a worse scenario

$ echo 'foo' | node -e 'process.stdin.pipe(process.stout)'
stdin is not a tty

Any suggestion? Just where / how to proceed here: I really don't know if it is a bad stuff on my shell, nodejs problems or others....

@jsumners
Copy link
Member

I do not believe Bash as delivered by git for Windows is a true posix implementation. I think it is based on Cygwin. You should try LFS for Windows.

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

I do not believe Bash as delivered by git for Windows is a true posix implementation. I think it is based on Cygwin. You should try LFS for Windows.

I don't understand, sorry. Do you mean LargeFileSystem for Windows? Do you have some links?

@jsumners
Copy link
Member

This https://docs.microsoft.com/en-us/windows/wsl/about

Windows is a video game OS for me 🤷‍♂️

@allevo
Copy link
Contributor Author

allevo commented Feb 24, 2022

Really thanks for your answers.
Anyway, with PowerShell all the above commands work fine.
So probably, this issue happens only with git bash.

Can I send a PR for updating the documentation?
Probably it is better to have a little section for advising people to use right shells (but I don't know what in this case means right....)

@jsumners
Copy link
Member

Can I send a PR for updating the documentation?

Yes.

@SadMap
Copy link

SadMap commented Mar 21, 2022

using node.exe -e 'console.log(666)' | pino-pretty works just fine
sCxnpMT6
https://stackoverflow.com/a/62532536
@mcollina

@temsa
Copy link

temsa commented May 2, 2022

using node.exe -e 'console.log(666)' | pino-pretty works just fine sCxnpMT6 https://stackoverflow.com/a/62532536 @mcollina

According to the answers in the ☝️ SO thread:

Git bash is establishing some aliases in its /etc/profile.d/aliases.sh. This includes node which is tested for existing prior to declaring alias node="winpty node.exe". So, node is implicitly run through winpty while node.exe is not.

You can also see it in the actual aliases.sh file

Also git-bash has some issues link more or less to that

I also found that we can run either node or node.exe from winpty -Xallow-non-tty (an undocumented option ) as a workaround, e.g. :

$ winpty -Xallow-non-tty node.exe -e 'console.log(666)' | pino-pretty
666
$ winpty -Xallow-non-tty node -e 'console.log(666)' | pino-pretty
666

I'm considering making a small PR on git-bash (aka git-for-windows ) for adding -Xallow-non-tty to the winpty command in the aliases.sh to avoid this kind of trouble for all the aliased programs

@Toooony
Copy link

Toooony commented Jun 5, 2022

I spent almost whole day on this. (windows 10, trying to use psql would return stdin is not tty)
The only thing that worked for me was to reinstall git and choose Use Windows default console window

As it was suggested on this answer:
https://stackoverflow.com/a/52264707/2357318

Ironically is in the same page along with the more popular answer about writing node.exe instead of node (I give that a try too. It wouldn't throw the error but neither would it execute anything).

@GerHobbelt
Copy link

GerHobbelt commented Jun 20, 2023

stdin is not a tty is almost always the result of _isatty() returning zero (i.e. not a TTY).

Work-around: use winpty

This has (unfortunately) been a known problem with git-for-windows / bash on Windows: depending on your install options1 this may happen.

The work-around is to prefix any command you wish to have a full-fledged TTY with winpty, e.g.

winpty node -i

Winpty is installed by git-for-windows, so should be available to you in the very shell where you experience this issue.

Reference material

Footnotes

  1. personal experience is that some git-for-windows releases in the past did not exhibit this issue, even when I did not use that 'default console' setting during git-for-windows installation, but insert some handwaving here, as that same devbox environment has seen some weird shit over the years and nobody seems to know how this issue shows up exactly. Anyway, what definitely works is either re-installing git-for-windows with that 'use windows console' config radio button TICKED or using winpty as the code starter when you need that TTY behaviour you crave. 😉

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants