터미널이 시작될 때 readline이 미리 "입력된" 텍스트를 추가하도록 하려면 어떻게 해야 합니까?

터미널이 시작될 때 readline이 미리 "입력된" 텍스트를 추가하도록 하려면 어떻게 해야 합니까?

사전에 "입력"되었다는 것은 대화형 콘솔에 사용자가 Enter 키를 눌러 실행(편집 및)할 때까지 기다리는 코드 텍스트가 있다는 의미입니다.

readline이 뭔가를 지원해야 할 것 같지만, 그렇지 않다는 것을 확인하는 것만으로도 충분합니다. 적어도 예상대로 추가 자동화 도구를 설치하는 것이 유일한 방법이라는 것을 알고 있습니다.

답변1

이것이 도움이 되는지, readline별로는 아닌지 확실하지 않지만 Python이 대안(또는 유사)이라면 한 가지 접근 방식은 다음과 같습니다.

#!/usr/bin/env python
""" Inject command to own command line """

import sys, fcntl, termios

def main():
    """ x """
    tty = sys.stdin
    old_attr = termios.tcgetattr(tty)
    new_attr = termios.tcgetattr(tty)
    # No echo please
    new_attr[3] &= ~termios.ECHO
    termios.tcsetattr(tty, termios.TCSANOW, new_attr)

    cmd = ' '.join(sys.argv[1:])
    for char in cmd:
        fcntl.ioctl(tty, termios.TIOCSTI, char)

    termios.tcsetattr(tty, termios.TCSANOW, old_attr)

if __name__ == '__main__':
    main()

좋다:

 script_name command to inject

답변2

ZShell에서는 print -z내장된 셸이 이 작업을 수행할 수 있습니다.

% echo 'print -z "ls -l"' >> ~/.zshrc
% exec zsh
% ls -l

그렇지 않으면 ZSH가 사용되지 않으므로 readline모든 readline솔루션은 확실히 ZSH™에서 "작동하지 않습니다".

관련 정보