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

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

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

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

  • получить приглашение оболочки в python
  • индикатор выполнения, чтобы узнать, сколько выполнено выход скрипта оболочки
  • Сделайте «.» И «источник» по умолчанию равным ~ / .zshrc
  • Shell glob - заменить файл path arg с содержимым файла
  • Как добавить / расширить zshell доработки?
  • Синтаксис команды повторения в zsh
  • Как получить экран для запуска / загрузки .zprofile при запуске нового окна?
  • Функция автозавершения Bash для SSHing в разные хосты
  • 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() в оболочке.

    Interesting Posts

    Как я могу отправить несколько параметров одной переменной

    Какое подразделение используется для значений памяти из верхней команды в Linux?

    Проверьте, какой cd сделал ksh

    Как использовать «фьюзер» для получения списка процессов для вложенной папки при использовании с родительской папкой в ​​качестве аргумента?

    Не удается запустить службу httpd из-за неправильного или неправильного пароля

    Как НЕ использовать ksshaskpass с ssh

    Что происходит с данными, скопированными после отмены fdisk?

    Wi-Fi регулярно перестает работать с Linux Mint 18

    mount / var / log как tmpfs в Linux

    Создайте загрузочный клон в Linux

    возможно ли извлечение / копирование аудио из определенной части видеофайла?

    Как извлечь текущую ревизию из каталога репозиториев SVN (subversion) + файлов

    Агент GPG не удаляет мой SSH-ключ из брелка

    Показать все Панировочные сухари в Наутилусе

    Не удалось установить рейд на моем NAS, пытаясь спасти данные, как мне следует продолжить?

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