Вопрос об интерактивном обнаружении в bash

У меня вопрос об интерактивном обнаружении в bash.

Следующий скрипт печатает, если он вызывается в интерактивном режиме или нет.

$ cat int.sh #!/bin/bash if [ -t 0 ]; then echo "interactive" else echo "not interactive" fi 

Некоторые примеры вызова …

 $ ./int.sh interactive $ echo toto | ./int.sh not interactive $ ./int.sh < ./int.sh not interactive $ ./int.sh <<EOF > hello world! > EOF not interactive 

Но почему результат является интерактивным для следующего случая?

 $ ./int.sh <( cat ./int.sh ) interactive 

  • Необходимо перенаправить ввод из файла, а также из tty
  • Повторение stdin при запуске ed (1) скрипта
  • Загляните в содержание stdin
  • Декодирование «prog> file 2> & 1"
  • Как подключить html к рыси?
  • Получение пользовательского ввода из сценария, используемого как stdin для сеанса SSH
  • Возьмите образец из файла или потока?
  • Как заставить программы python вести себя как соответствующие инструменты unix?
  • One Solution collect form web for “Вопрос об интерактивном обнаружении в bash”

    Оператор <(...) в bash – это замещение процесса . Процесс в <(...) выполняется с его вводом или выводом, подключенным к FIFO или некоторому файлу в /dev/fd . См. Его:

     echo <(echo foo) 

    Он печатает что-то вроде /dev/fd/63 . Это файловый дескриптор. Затем часть <(...) заменяется этим файловым дескриптором. Поэтому в вашем заявлении вызов будет, например:

     ./int.sh <( cat ./int.sh ) 

    Заменяется на:

     ./int.sh /dev/fd/63 

    Таким образом, это просто аргумент скрипту ./int.sh , который все еще называется интерактивно.

    Linux и Unix - лучшая ОС в мире.