내 명령줄이 특정 패턴과 일치하면 이를 함수나 프로그램에 제공합니다.

내 명령줄이 특정 패턴과 일치하면 이를 함수나 프로그램에 제공합니다.

나의 궁극적인 목표는 다음과 같습니다.

$ python3 -c "print(\"Hello, world!\")"
Hello, world!
$ >>> print("Hello, world!")
Hello, world!

기본적으로 명령줄이 로 시작될 때마다 명령줄의 나머지 부분이 >>>스위치를 통해 입력되기를 원합니다.python3-c

함수를 선언하고 사용할 수 있는 경우 >>>다음과 같이 구현됩니다.

>>>() {
    python3 -c "$@"
}

참고로 저는 zsh.

첫 번째 시도는 라는 별칭을 만드는 것이었지만 >>>두 셸 모두에서 작동하지 않았습니다. 다음으로 함수 생성을 시도했는데 >>>ZSH에서 작동하지만 호출할 수 없는 것 같습니다( 또는 >>>을 사용하여 \>\>\>).

이 목표를 어떻게 달성할 수 있나요?

답변1

이는 zsh가 행을 구문 분석하기 전에 발생해야 하기 때문에(zsh 구문이 아닌 Python 구문이어야 하기 때문에) 위젯에서 이 작업을 수행해야 합니다 accept-line.

accept-line() {
  emulate -L zsh
  set -o extendedglob
  case $BUFFER in
    ('>>>'*)
      zle -I
      fc -R =(print -r -- $BUFFER)
      python -c "${BUFFER##>>> #}"
      BUFFER=
      ;;
    (*) zle .$WIDGET
  esac
}
zle -N accept-line

답변2

이것은 작동합니다 zsh. 함수를 정의할 때 특수 문자/따옴표를 이스케이프 처리하는 것을 기억하세요.

'>>>'() {
    python3 -c "$@"
}
'bad|idea<for>a command name'() { :; }

관련 정보