Перенаправление локального порта
ssh создает дополнительный локальный порт, который будет перенаправлен на порт в удаленной системе.
example
ssh -L 8080:127.0.0.1:80 user@webserver
Затем в вашем браузере по локальному URL-адресу http: // localhost: 8080 /
он подключится к порту 8080 локальных машин, который ssh перенаправит на удаленный ssh, и он будет затем отправьте запрос на 127.0.0.1:80
. Примечание 127.0.0.1
на самом деле является локальным хостом удаленного сервера, но это мог быть хост / IP, доступный в сети удаленного компьютера.
Удаленная пересылка
Запрашивает ssh создать порт прослушивания на удаленной машине, который он будет пересылать назад (в обратном направлении) на локальный ssh для пересылки.
ssh -R 10123:127.0.0.1:123 user@webserver
Итак, после того, как ssh подключается к веб-серверу, удаленный ssh создает и lsitens на порту 10123. Процесс на веб-сервере, подключающийся к 10123, ssh забирает его и отправляет обратно на ssh локального компьютера, который отправляет его на 127.0.01: 123 порт.
Проблема, которую вы видите, почти наверняка связана с тем, что информация о ходе выполнения печатается с возвратом каретки CR (-, окончанием строки ASCII 13 )вместо традиционной строки Unix LF (-. ] подача, ASCII 10 ). Это делается для того, чтобы каждое новое обновление прогресса печаталось поверх последнего.
К сожалению, это означает, что весь набор обновлений прогресса выглядит для grep
, ack
и всех других линейно-ориентированных -инструментов как одна строка. Вот почему они, кажется, «запираются» и ничего не печатают, пока ffmpeg
не завершится, и я не могу придумать аналогичный инструмент выделения, который работал бы на чем-либо, кроме стандартной линейной основы Unix.
Вы могли бы попробовать что-то вроде:
ffmpeg... | tr \\015 \\012 | grep...
, который преобразует все CR в LF. Это позволяетgrep
и др. видеть каждое обновление прогресса в виде отдельной строки за счет также просмотра каждого обновления в виде отдельной строки, заполняя ваш терминал:
frame= 85 fps=0.0 q=28.0 size= 0kB time=00:00:03.79 bitrate= 0.1kbits/s dup=1 drop=0 speed=7.55x
frame= 129 fps=129 q=28.0 size= 0kB time=00:00:05.65 bitrate= 0.1kbits/s dup=1 drop=0 speed=5.64x
frame= 172 fps=111 q=28.0 size= 256kB time=00:00:07.42 bitrate= 282.6kbits/s dup=1 drop=0 speed=4.81x
frame= 213 fps=104 q=28.0 size= 512kB time=00:00:09.17 bitrate= 457.3kbits/s dup=1 drop=0 speed=4.49x
frame= 254 fps= 99 q=28.0 size= 512kB time=00:00:10.85 bitrate= 386.3kbits/s dup=1 drop=0 speed=4.22x
frame= 295 fps= 96 q=28.0 size= 768kB time=00:00:12.56 bitrate= 500.7kbits/s dup=1 drop=0 speed=4.08x
frame= 333 fps= 93 q=28.0 size= 1024kB time=00:00:14.14 bitrate= 593.1kbits/s dup=1 drop=0 speed=3.94x
frame= 382 fps= 93 q=28.0 size= 1024kB time=00:00:16.19 bitrate= 518.1kbits/s dup=1 drop=0 speed=3.93x
frame= 428 fps= 93 q=28.0 size= 1280kB time=00:00:18.11 bitrate= 579.0kbits/s dup=1 drop=0 speed=3.92x
frame= 473 fps= 92 q=28.0 size= 1536kB time=00:00:20.00 bitrate= 628.9kbits/s dup=1 drop=0 speed=3.91x
frame= 519 fps= 92 q=28.0 size= 1536kB time=00:00:21.93 bitrate= 573.8kbits/s dup=1 drop=0 speed= 3.9x
frame= 567 fps= 92 q=28.0 size= 1792kB time=00:00:23.91 bitrate= 613.9kbits/s dup=1 drop=0 speed=3.89x
frame= 601 fps= 90 q=28.0 size= 2048kB time=00:00:25.32 bitrate= 662.6kbits/s dup=1 drop=0 speed= 3.8x
frame= 637 fps= 89 q=28.0 size= 2304kB time=00:00:26.83 bitrate= 703.3kbits/s dup=1 drop=0 speed=3.75x
frame= 684 fps= 89 q=28.0 size= 2304kB time=00:00:28.77 bitrate= 655.9kbits/s dup=1 drop=0 speed=3.74x
frame= 720 fps= 84 q=-1.0 size= 2924kB time=00:00:30.01 bitrate= 798.0kbits/s dup=1 drop=0 speed= 3.5x
...
Вероятно, вы также захотите отключить буферизацию stdio между компонентами в этом конвейере для максимального отклика:
stdbuf -o0 ffmpeg... 2>&1 | stdbuf -i0 -o0 tr \\015 \\012 | stdbuf -i0 -o0 grep...
Ответ Адриана очень помог, но я потерял диалог, подсказку
File 'output.mkv' already exists. Overwrite ? [y/N]
С помощью инструмента vialog
, который использует xterm
и его файл журнала, я мог заставить его работать полностью
stdbuf -o0 vialog ffmpeg -t 10 -i input.mp4 output.mkv |
stdbuf -i0 -o0 tr -s '\015' '\012' |
stdbuf -i0 -o0 grep --color -e 'time' -e 'speed' -e 'Audio:' -e 'Video:' -e '$'
с диалогом в окне xterm
с высоким -освещением в окне терминала, где vialog
запускается (, что делает его консольным окном xterm
),
Вы можете найти инструмент vialog
по этой ссылке,
Разбудить меня, когда [медленный] процесс командной строки требует моего внимания?
Вы можете изменить vialog
, чтобы сделать то, что вам нужно.