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