나는 GNU 화면의 구성을 조사하고 다음 구성을 다음 위치에 넣었습니다 ~/.screenrc
.
bind l eval 'exec ls'
이제 를 입력하면 현재 디렉터리에서 실행됩니다 C-a l
. ls
여태까지는 그런대로 잘됐다. 그런데 문제는 프로세스를 종료하고 터미널에 다시 들어가려면 추가 Enter 키를 눌러야 한다는 것입니다. 추가 Enter 키를 누르지 않으려면 어떻게 해야 합니까?
답변1
를 입력하면 창에서 실행 중인 프로그램에 관계없이 현재 창에서 C-a l
실행되고 출력이 표시됩니다 .ls
창에서 실행 중인 셸을 사용하여 이 작업을 수행하고 셸이 프롬프트를 표시하는 경우 ls
프롬프트 뒤에 출력이 나타납니다. Shell은 ls
Screen에 의해 직접 실행되기 때문에 무슨 일이 일어나고 있는지 전혀 모릅니다 . 프롬프트에 입력한 경우 지금까지 입력한 내용이 그대로 유지되어 Enter 키를 누를 때까지 기다립니다. 나중에 Enter를 누르면 C-a l
입력한 명령이 실행됩니다. 마지막 프롬프트에 아무것도 입력하지 않은 경우 이는 빈 명령이므로 쉘이 새 프롬프트를 표시합니다.
Bash 또는 zsh에서 Ctrl+를 누르면 L프롬프트와 현재 입력 줄이 다시 표시됩니다.
이 작업을 피하려면 ^L
화면 내에서 실행 중인 애플리케이션에 삽입하십시오. 프롬프트를 표시하는 셸이기를 바랍니다. 여러 명령을 실행하려면 명시적으로 셸을 호출해야 합니다. 당신은 !
통과 해야FDPA그렇지 않으면 ^L
껍질에 들어가지 않습니다.
bind l exec ! sh -c 'ls /; screen -X stuff ^L'
ls
이 명령은 항상 Screen의 현재 디렉토리에서 실행되며 쉘에서 디렉토리를 변경할 때 변경되지 않기 때문에 그다지 유용하지 않습니다 . ls
셸에서 키를 실행 하려면 화면 바인딩 대신 셸의 현재 디렉터리에 셸 바인딩을 설정하세요.