Клавишу привязки экрана требуется дополнительная клавиша Enter (RET)

Я играл с конфигурацией GNU Screen и размещал следующую конфигурацию в ~/.screenrc :

 bind l eval 'exec ls' 

Итак, теперь, когда я печатаю Ca l , он запускает ls в текущем каталоге. До сих пор все прекрасно и денди. Но проблема в том, что я должен нажать клавишу Enter, чтобы выйти из процесса и снова вернуться к терминалу. Как я могу избежать нажатия дополнительной клавиши Enter?

Когда вы вводите Ca l , это запускает ls и отображает вывод в текущем окне независимо от того, какая программа запущена в окне.

Если вы сделаете это с помощью оболочки, запущенной в окне, и оболочка отобразит ее приглашение, тогда после вывода ls . Оболочка не знает, что произошло, поскольку ls выполняется непосредственно с экрана. Если вы набрали подсказку, то, что вы набрали до сих пор, все еще существует, ожидая, что вы нажмете Enter. Если вы нажмете Enter после Ca l , это выполнит команду, которую вы набрали; если вы не набрали ничего в последнем приглашении, это пустая команда, которая заставляет оболочку отображать новое приглашение.

В bash или zsh нажмите Ctrl + L, чтобы повторно отобразить приглашение и текущую строку ввода.

Если вы хотите этого избежать, вставьте приложение ^L в приложение, запущенное внутри экрана, в надежде, что это оболочка, отображающая подсказку. Вы должны явно вызывать оболочку, так как вы хотите запускать несколько команд. Вы должны пройти ! как fdpat, так как иначе ^L не переходит в оболочку.

 bind l exec ! sh -c 'ls /; screen -X stuff ^L' 

Эта команда не очень полезна, поскольку она всегда запускает ls в текущем каталоге экрана, который не изменяется при изменении каталогов в оболочке. Если вы хотите, чтобы ключ запускал ls из оболочки, в текущем каталоге оболочки, сделайте привязку оболочки, а не привязку экрана.