Вывести только указанный c файловый дескриптор, используя bash - PullRequest
0 голосов
/ 26 апреля 2020

Следующая команда перенаправляет fd 2 на /dev/null, возможно ли выводить только 2?

node ./index.js 2>/dev/null

1 Ответ

1 голос
/ 26 апреля 2020

В классической модели программирования Unix нет способа сделать это. Вместо этого программы могут пытаться охватить все возможные FD и попытаться закрыть их:

(
  limit=$(ulimit -n)
  # Try to estimate some upper bound if not set
  [ "$limit" = "unlimited" ] && limit=1024
  for ((i=0; i<limit; i++))
  do
    [ "$i" != 2 ] && exec {i}>&-
  done
  exec node ./index.js
)

Однако большинство ОС имеют способ для проверки открытых FD. Например, Linux позволяет вам:

(
  for fd in "/proc/$BASHPID/fd"/*
  do
    fd="${fd##*/}"
    [ "$fd" != 2 ] && exec {fd}>&-
  done
  exec node ./index.js
)

Вы можете sh оставить открытыми 0 и 1 и / или перенаправить их с / на /dev/null, так как некоторые программы не справляются хорошо, когда stdin и stdout закрыты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...