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

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

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

  • Автоматическая очистка истории Bash
  • Шестнадцатиричные символы трубы для awk
  • Получение sudo для работы с псевдонимом
  • Присвоить значение переменной в 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 

  • Невозможно выполнить exec / bin / false: нет такого файла или каталога
  • Bash: разрешение отклонено при попытке эхо-передачи данных непосредственно в сеть
  • Как bash интерпретирует равный оператор без окружающих пространств в условном?
  • Как превратить весь stdin в аргумент командной строки дословно?
  • Хранение вывода скрипта оболочки переменной
  • Работы Cron и уведомление по почте
  • 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 - лучшая ОС в мире.