Отметьте дескриптор как терминал для теста -t

Можно проверить, подключен ли дескриптор к терминалу с -t тестом.

if [ ! -t 0 ]; then echo "Stdin is not from terminal" fi 

Имея дескриптор X, указывая на файл или на процесс (с перенаправлением> (cmd)), можно ли сделать его похожим на терминал? Для теста -t пройти?

2 Solutions collect form web for “Отметьте дескриптор как терминал для теста -t”

Вместо >(cmd) , считая, что stdin cmd вы хотите быть tty вместо трубы, вы можете попробовать и использовать:

 >(socat -u - exec:'cmd',pty) 

socat будет использовать пару псевдо-tty и иметь stdin cmd , подключенный к подчиненной части ( [ -t 0 ] вернет true).

Псевдотерминал будет переведен в необработанный режим, поэтому линейная дисциплина не должна мешать данным, поэтому в этом отношении она более или менее эквивалентна трубе.

Однако псевдотерминалы не могут быть закрыты на одном конце, как трубы. Итак, socat не может сказать cmd что больше нет ввода. Вместо этого, после того, как stdin Socat достигнет конца файла, socat будет немного подождать и уничтожить псевдо-tty, что обычно означает, что cmd получает SIGHUP.

Если ваша команда занимает больше времени для обработки данных или ждет окончания файла на stdin, прежде чем начинать что-либо делать, это не будет работать должным образом.

Команда test запускает isatty(fd) чтобы проверить, связан ли дескриптор с TTY.

isatty(3) – это функция библиотеки C, которая проверяет, позволяет ли дескриптор файла отправлять вызовы ioctl(2) терминала в дескриптор.

Поэтому вы не можете подделать результат, если не используете LD_PRELOAD= для перезаписывания функции isatty() в оболочке.

  • Получить коды сканирования в восьмеричном формате
  • как различать пользовательские сервисы и системные службы в systemd?
  • Расширение имени файла с диапазонов дат
  • автозаполненные названные каталоги
  • могу ли я удалить текущее убийство в zsh?
  • Как создать цепочку команд?
  • Заполнение поддельных каталогов avfs в zsh
  • Как сортировать имена файлов в числовом порядке и измененный порядок времени?
  • Есть что-то вроде закрытия для zsh?
  • Как включить обратный поиск в zsh?
  • ZSH, конкатенация передается аргументами в одну строку
  • Асинхронный RPROMPT?
  • Interesting Posts

    Как сопоставить текст между строкой и пробелом

    Невозможно добавить новый раздел с помощью fdisk – нет свободных секторов

    Сортировка некоторых строк в файле

    захватить из текстового файла диапазон с использованием двух переменных в качестве начального и конечного параметров

    Я убиваю процесс, но возвращаюсь

    цитируя проблему, когда трубопровод находит выход в xargs

    Извлечь определенный текст из переменной в сценарии оболочки

    Как заставить систему автоматически убивать некоторые процессы?

    Система больше не выводит символы UTF-8

    Suse 12.1 autoyast, пароль root не установлен

    Выполнить команду в другом терминале и закрыть ее без команды kill

    Упаковка загрузчика как изображение ядра

    Перечислите права доступа только к текущему каталогу

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

    Выполнение арифметики с плавающей запятой в определениях переменных сценария оболочки

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