Почему мне нужно вставить 12 символов, чтобы очистить эту командную строку bash?

Если ваше разрешение было в минутах/часах/днях, а не в секундах, вы можете использовать 'at':

ssh root@IP 'echo /tmp/script | at now + 5 minutes'

(Требуется работающий демон at 'atd')

РЕДАКТИРОВАТЬ :Если вам нужно разрешение в секундах, вы можете использовать 'sleep', но вам нужно перенаправить stdout и stderr, чтобы ssh разорвал соединение:

ssh root@IP "(sleep 5; /tmp/script) >/dev/null 2>/dev/null &"

Я нашел решение здесь:https://serverfault.com/a/36436

14
09.08.2019, 00:12
1 ответ

Когда какая-то другая программа печатает fooв /dev/pts/9, связь между ttys, оболочка не участвует в обмене, она не может знать, сколько символов было напечатано или даже если был напечатан какой-либо символ. Оболочка по-прежнему считает, что нет символов для стирания. На самом деле, если вы напечатаете fooна терминале и попытаетесь стереть его клавишей Backspace, это не сработает. Оболочка не пытается стереть то, чего, по ее мнению, нет.

Попробуйте в терминале, где вы использовали команду --norc --noprofile:

bash-4.3$ printf 'some text'

чтобы получить:

some textbash-4.3$

В этот момент возврат ничего не удалит. Также ctrl-uничего не сотрет. Если вы наберете несколько символов (, до 11 из них)ctrl-uудалит только то, что было введено (, как и возврат ). Но когда символов больше 11,команда ctrl-uвернется к тому, что она считает началом строки (более быстрый способ стереть много символов ), который оставит это приглашение:

some textb

Это можно считать ошибкой IMO (, все еще присутствующей в bash 5.0 ). Но меняется на 20 (18 для OP )символов в bash -5 если опции--norc--noprofileне используются (Я не пытался найти причину, не такой уж и важный вопрос ИМНшО ).

20
27.01.2020, 19:51

Теги

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