2009-02-07 5 views
1

Linux에서 bash 프롬프트에 명령을 삽입 할 수있는 방법이 있습니까? 커맨드 히스토리 앱에서 일하고 있는데 Ctrl + R 검색과 같지만 다르다. 나는 이것을 위해 파이썬을 사용하고있다.Bash 쉘에 명령 삽입

사용자의 검색어에 따라 기록의 명령 목록을 표시합니다. 사용자가 Enter 키를 누르면 명령이 실행되고 결과가 인쇄됩니다. 여태까지는 그런대로 잘됐다.

사용자가 명령을 선택하고 오른쪽 또는 왼쪽 키를 누르면 프롬프트에 명령을 삽입하여 사용자가 명령을 실행하기 전에 편집 할 수 있도록합니다.

리눅스 사용자라면 bash 콘솔을 실행하고 Ctrl + r을 누른 다음 cd (또는 뭔가)를 입력하고 오른쪽 화살표 키를 누르십시오. 선택한 명령이 프롬프트에 표시됩니다. 이것은 내가 찾고있는 기능입니다 -하지만 파이썬에서 그렇게하는 법을 알고 싶습니다.

답변

3

셸이 파이썬 프로그램의 하위 프로세스로 실행되는 경우에만이 작업을 수행 할 수 있습니다. 부모 프로세스의 표준 입력에 콘텐츠를 제공 할 수 없습니다. (가능하다면 호출 쉘보다 적은 권한으로 프로세스를 실행할 때 UNIX와 관련된 보안 문제가 많이 발생합니다!)

Expect은 대화식 하위 프로세스에 대한 패스 스루를 허용하는 방법에 익숙한 경우 자식 프로세스에서 수신 한 사용자 또는 문자열이 일치를 트리거하고 프로그램으로 다시 제어를 보내면), 파이썬에서 pexpect으로 동일한 작업을 수행 할 수 있습니다. 또는, 언급 된 또 다른 포스트로서, curses 모듈은 그래픽 디스플레이 (X11/win32) 팝업창보다는이 내역 메뉴가 윈도우 내에서 발생하는 경우 터미널 디스플레이의 그림을 완벽하게 제어 할 수 있습니다.

3

readline 모듈을 참조하십시오. 이 모든 기능을 구현합니다.

3

정확하게 이해한다면, 역사 작업은 python 앱의 bash와 비슷할 것입니다. 이것이 당신이 원하는 것이라면 GNU Readline Library 가야 할 길입니다.

파이썬 래퍼 GNU readline interface이 있지만 Unix에서만 실행됩니다. readline.py은 Windows 용 버전 인 것 같지만 결코 시도하지 않았습니다.