Как стать автором
Обновить

Комментарии 20

Проблема в том что большое количество утилит Unix, таких как lstelnetftpedawksedgreptargzip, были созданы для компьютеров, которых больше не существует.

Ограничения, связанные с утилитами, скорее обусловлены тем, что все они работают с потоками данных. А концепция потока данных для современного пользователя неочевидна (хотя сейчас с появлением возможности стримить что угодно должна восприниматься легче, чем 10-15 лет назад, когда основной единицей обработки для пользователя был файл, если не "документ word").

Все так, далее по тексту мысль раскрывается

Терминал - это физическая часть интерфейса
Оболочка (shell) - софтварная

Я с этого все лекции по введению в Линукс начинаю. И что вывести на экран, если мы в винде запустили какой-нить putty, подключились по сети к серверу который находится в другом городе вместе с еще десятком пользователей - заставляет подумать что же такое "вывести на экран", и понять что stdout это немножко другое.

А насчет "мы читим" - так для чата в пределах компа через tty/pts давно была придуманы команды write/mesg/wall и группа tty

Я так объясняю: сначала у компьютера были один экран и одна клавиатура. Потом один умный человек сказал — "а почему одна, всё равно для компьютера это устройство ввода-вывода, давайте подключим две (а где две — там и пятнадцать), и тогда с компьютером будут работать много пользователей". Потом другой умный человек сказал — "а зачем их подключать шнуром — пусть /dev/ptyXXX делает вид, что оно и есть этот самый шнур — а как реально оно подключено, уже неважно", ну и так далее и так далее. Смысл в том, что начинаем с простого, а потом на следующем этапе нечто делает вид, что оно — это то простое, что было, когда этого нечто ещё не было.

Вообще-то сначала у компьютера было сразу несколько печатных машинок. =)

В bash и zsh echo встроенный, и он не поддерживает esc-последовательности. Надо использовать внешний /bin/echo -e

$ bash -c 'help echo' | grep -- '-e'
-e enable interpretation of the following backslash escapes
`echo' interprets the following backslash-escaped characters:

Да, вы правы, в bash есть. В дебианоидном dash который /bin/sh - нету

Да ладно. Вы просто не знаете как их туда вводить.

А как мне послать что-то в другой pty, чтобы оно там воспринялось как ввод (а не просто появилось на экране)?

tmux send-keys

Дык для этого поди ж tmux должен быть запущен на принимающей стороне?

Через пайп сделать кат в другой терминал прямо по его имени или через < перенаправление. Кажется в статье как раз такой пример.

Запись в файл терминала просто выводит записанное на экран. Мне надо, чтобы записанное было воспринято как ввод.

Например, есть у нас два терминала: /dev/pts/0 и /dev/pts/1, в обоих запущен bash, оба просто ждут ввода. Если я в баше нулевого терминала запущу echo ls >/dev/pts/1, то строка ls просто появится во втором терминале. Bash ее не увидит и не выполнит.

А, понятно. Только непонятно зачем.

Ведь весь смысл терминалов, что за каждым сидит отдельный пользователь со своим вводом и выводом. Вам бы не понравилось если бы ваш терминал принимал ввод от другого пользователя.

Скорее всего так можно сделать, но это ломает всю концепцию терминалов.

Вам бы не понравилось если бы ваш терминал принимал ввод от другого пользователя.

Файлами терминала владеют пользователи которые в этот терминал залогинены и права на файл настроены так, что другие пользователи доступа к этому файлу не имеют. Т.ч. уже сейчас на чужой терминал даже вывести ничего нельзя, не вижу причин для ввода не использовать ту же самую схему.

Так а зачем, вы так и не ответили

не получилось в Z Shell zsh и Bourne Again Shell bash
В bash:
echo -e '\e[31mhello\e[0m world'
В zsh:
echo '\e[31mhello\e[0m world'

В macos Terminal app

я буду добавлять связанные статьи по мере их написания

Супер! Ждём!

Зарегистрируйтесь на Хабре, чтобы оставить комментарий