read icon indicating copy to clipboard operation
read copied to clipboard

[QUESTION] How to prevent EAGAIN: resource temporarily unavailable when trying to read from stdin with `fs.readFileSync(0)` after using read?

Open cirosantilli opened this issue 3 years ago • 0 comments

Reproduction:

const fs = require('fs')
const readCb = require('read')

async function read(opts) {
  return new Promise((resolve, reject) => {
    readCb(opts, (err, line) => {
      resolve([err, line])
    })
  })
}

;(async () => {
  const [err, password] = await read({ prompt: 'Password: ', silent: true })
  console.log(password)
  console.log(fs.readFileSync(0).toString())
})()

Run:

node --unhandled-rejections=strict main.js

Outcome:

fs.js:614
  handleErrorFromBinding(ctx);
  ^

Error: EAGAIN: resource temporarily unavailable, read
    at Object.readSync (fs.js:614:3)
    at tryReadSync (fs.js:383:20)
    at Object.readFileSync (fs.js:420:19)
    at /home/ciro/test/main.js:70:18
    at processTicksAndRejections (internal/process/task_queues.js:95:5) {
  errno: -11,
  syscall: 'read',
  code: 'EAGAIN'
}

read 1.0.7, node.js v14.17.0., Ubuntu 21.10.

Related: https://stackoverflow.com/questions/4708787/get-password-from-input-using-node-js/71868483#71868483

cirosantilli avatar Apr 14 '22 09:04 cirosantilli