//1./a.out
:
Если вы не выполняете перенаправление стандартного ввода (без канала и без <
), стандартный ввод наследуется от родительского процесса. Когда вы запускаете a.out
в интерактивном режиме в оболочке, он наследует терминальное устройство, которое получает ваш ввод с клавиатуры как стандартный ввод.
Терминальные устройства обычно недоступны для поиска, потому что они представляют взаимодействие с пользователем, но в соответствии со стандартом POSIX lseek
могут возвращать успех и просто ничего не делать. В Linux lseek
завершается с ошибкой ESPIPE
.
//2./a.out < /etc/passwd
:
Здесь стандартный ввод перенаправляется на открытый файл. Поскольку /etc/passwd
должен быть обычным файлом, его можно найти.
//3 cat < /etc/passwd |./a.out
:
Здесь вы запускаете два процесса(cat
и./a.out
)и соединяете их каналом.
cat
(без других аргументов )читает его на стандартный ввод(/etc/passwd
)и копирует в свой стандартный вывод (канал, соединяющийся с./a.out
). Это не то же самое, что //2
. С точки зрения ./a.out
stdin не может искать, потому что это всего лишь канал, соединяющий другой процесс.
//4./a.out < /var/spool/cron/FIFO
:
Здесь у вас есть именованный канал или аналогичный специальный файл. Этот случай подобен //3
. У вас есть однонаправленное соединение с другим процессом. И эти не доступны для поиска.
Вы должны использовать 1 *2 *2 (=4 )управления -b, чтобы получить управление -b для tmux третьего уровня с привязками по умолчанию, и 1 *2 *2 *2 (=8 )для перехода на четвертый уровень tmux, и вообще 2 n -1 для перехода на n й tmux.
«Что происходит?». Все элементы управления -b считываются tmux первого уровня. Первый взят для введения последовательности команд. Второй говорит запустить команду для отправки элемента управления b в приложение. Третий запускает последовательность, а четвертый запускает команду для отправки приложению второго элемента управления -b. Теперь приложение tmux второго уровня. В результате того, что вы ввели 4 элемента управления -b, tmux первого уровня отправил 2 элемента управления -b на второй уровень. Первый из них запускает последовательность команд, а второй запускает команду для отправки элемента управления -b на tmux третьего уровня.
Если вы собираетесь часто использовать tmux с глубокой вложенностью, я предлагаю вам рассмотреть возможность добавления некоторых пользовательских привязок для отправки 2, 4, 8, 16 и т. д. управляющих символов -b. Например
bind-key -T prefix C-g send -N 1 C-b
bind-key -T prefix C-h send -N 2 C-b
bind-key -T prefix C-l send -N 4 C-b
Вы можете поместить их в файл конфигурации tmux,или введите их на первом уровне tmux, набрав Ctrl-b:bind-keyПробел-TПробелprefixПробелC-hПробел и т. д. Это заставит Ctrl-bCtrl-g / h / l отправить команды второму/третьему/ tmux четвертого уровня.
Альтернативой, которую я упоминаю для полноты картины, является использование разных префиксных ключей в разных tmux. Я не рекомендую это, это дает слишком много возможностей запутаться.