私の究極の目標は次のとおりです。
$ 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'() { :; }