Как использовать сеанс ssh без форматирования цвета

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

Один из распространенных случаев - когда вы dd an fs образ на usb флеш-накопитель не предоставляете conv = fdatasync ] вариант (который отсутствует в большинстве рецептов, опубликованных здесь и там): скорость записи флеш-устройства очень низкая, поэтому для записи всего может потребоваться несколько минут, особенно если на флешку уже было записано много секторов.

Программа sync гарантирует, что все будет очищено после ее завершения.

1
19.08.2017, 20:17
1 ответ

Просто сделай это.

Предполагается, что локальные программы, выходные данные которых направляются в другую программу, обнаружат, что они не подключены ни к какому терминалу, поэтому они не могут использовать какие-либо цветовые коды (, которые различаются между терминалами, поэтому переменная среды TERM )].

И когда локальная программа sshпередается в другую программу, и вы не передаете опции -tt, она подавляет выделение "псевдо -терминала" и вместо этого использует конвейеры. См. также man ssh.

Если бы ваш код выделял «псевдо -терминал» вместо использования конвейера для захвата вывода, вы бы заметили этот факт. В большинстве случаев требуемый код более неясен и длиннее, чем если бы вы использовали канал; в большинстве случаев вам не нужны (или, как вы говорите, нужны )дополнительные возможности PTY.


КРОМЕ Я думаю, что ваш вопрос неверен (в части ОБНОВЛЕНИЯ)

Предположим, вы на самом деле не используете ssh, а вместо этого используете sshpass -p '${auth.password}' ssh...

sshpass, согласно его manстранице, запускает ssh «в выделенном TTY, обманывая его, заставляя думать, что он получает пароль от интерактивного пользователя» (да, это еще один PTY ).

В этом случае вам потребуется снова отключить нормальное поведение терминала для внутреннего соединения SSH. т.е. используя ssh -T(, а не ssh -t, как в одном из коммитов кода! ).

Я думаю, что префикс TERM=dumbтакже дает очень похожий эффект. Это что-то вроде работы -. ssh -Tизбавляет от необходимости возиться с TERM. Но я тестировал TERM=dumb sshpass sh -c 'echo $TERM'на своем компе, вроде проходит нормально, и может вам так проще.

Следующий вопрос :Почему ваше тестирование говорит вам, что это необходимо, когда ваш код также уже работает, чтобы установить TERM=dumb, прежде чем вы запустите (внутреннюю команду )ssh? Вы ожидаете, что sshуже унаследовал TERM=dumb. Посмотрите на код для Jsch.Я думаю, что ваш setPtyType("dumb")не будет иметь никакого эффекта, по той причине, что у вас нет вызова setPty(true).

Моему пониманию противоречит Ваше утверждение, что setPty(false)"ломается", но Вы не говорите как.

3
27.01.2020, 23:24

Теги

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