Как заставить tmux использовать "C -b C -b C -b" для входа в третий вложенный сеанс tmux?

//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.outstdin не может искать, потому что это всего лишь канал, соединяющий другой процесс.

//4./a.out < /var/spool/cron/FIFO:

Здесь у вас есть именованный канал или аналогичный специальный файл. Этот случай подобен //3. У вас есть однонаправленное соединение с другим процессом. И эти не доступны для поиска.

0
08.04.2021, 01:33
1 ответ

Вы должны использовать 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. Я не рекомендую это, это дает слишком много возможностей запутаться.

1
28.04.2021, 22:53

Теги

Похожие вопросы