Вопрос об интерактивном обнаружении в 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 

  • Сценарий Bash и stdin
  • Каталог / dev содержит системные устройства. / dev / stdin - это ссылка. На что это указывает?
  • Сценарий Ed работает только в том случае, если набирается медленно
  • Почему cc (компилятор C) и подобные утилиты по умолчанию не используют стандартные потоки?
  • cat STDIN не будет работать дважды в скрипте
  • Кошка никогда не читает с терминала?
  • Как перенаправить STDIN фонового процесса?
  • Как заставить mplayer играть с stdin?
  • 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 , который все еще называется интерактивно.

    Interesting Posts

    Запустите команду, сохраненную в переменной, чтобы эхо в файл

    сортировать по максимуму первых двух столбцов

    Использование инструкции if с помощью или для проверки аргументов для сценария оболочки

    Как скрипт / программа выполняется в unix?

    Как удалить постоянные данные конфигурации из APT?

    Как установить CentOS 7.x (последняя) на моем HP-15ac048tu?

    Как объединить данные из многих файлов в один файл?

    Копирование файлов в bash

    Ошибка при ручной установке вручную в CentOS

    Являются ли Icecat и Iceweasel разными проектами?

    Прочитайте файл и прокомментируйте строку, соответствующую строке, с помощью сценария оболочки

    Как я могу установить команду `ll` в Mac OS X?

    Перенаправить вывод в stdout и pipe в двоичный файл

    Запуск программы в .profile предотвращает запуск графического интерфейса пользователя

    Сценарий переключения Wi-Fi не работает должным образом через i3

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