
나의 궁극적인 목표는 다음과 같습니다.
$ 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'() { :; }