Подтвердить что ты не робот

Представьте, что это tty в bash для любой команды

Всякий раз, когда я использую grep и --color его в другую программу, опция --color не --color. Я знаю, что мог бы использовать --color=always, но он также предлагает некоторые другие команды, которые я хотел бы получить точный вывод этой команды в качестве вывода, который я получил бы, если бы я был в tty.

Итак, мой вопрос, возможно ли обмануть команду, заставив ее думать, что команда запускается внутри tty?

Например, бег

grep --color word file # Outputs some colors
grep --color word file | cat # Doesn't output any colors

Я хотел бы иметь возможность написать что-то вроде:

IS_TTY=TRUE grep --color word file | cat  # Outputs some colors

Кажется, у этого вопроса есть инструмент, который может делать то, что я хочу: пустой - запускать процессы и приложения под псевдотерминалом (PTY), но из того, что я мог прочитать в документации, я не уверен, что это может помочь в моей проблеме

4b9b3361

Ответ 1

Существует несколько вариантов, описанных в нескольких других ответах на переполнение стека (см. Комментарий Каарлоса). Я суммирую их здесь, хотя:

  1. Используйте script + printf, не требует дополнительных зависимостей:

    0<&- script -qefc "ls --color=auto" /dev/null | cat
    

    Или создайте функцию faketty для инкапсуляции:

    faketty () {
        script -qfce "$(printf "%q " "[email protected]")"
    }
    faketty ls --color=auto | cat  
    

    Или в раковине рыбы:

    function faketty
        script -qefc "(printf "%q " "$argv")"
    end
    faketty ls --color=auto | cat 
    

    (кредит идет на этот ответ)

    http://linux.die.net/man/1/script

  2. Используйте команду unbuffer (как часть expect набора команд), к сожалению, для этого требуется установка 50mb+, но это самое простое решение:

    sudo apt-get install expect-dev
    unbuffer -p ls --color=auto | cat  
    

    Или, если вы используете раковину рыбы:

    function faketty
        unbuffer -p $argv
    end
    faketty ls --color=auto | cat 
    

    http://linux.die.net/man/1/unbuffer

Это отличная статья о том, как работают TTY и что такое псевдо-TTY (PTY), стоит взглянуть, если вы хотите понять, как оболочка linux работает с файловыми дескрипторами для передачи ввода, вывода и сигналов. http://www.linusakesson.net/programming/tty/index.php