コマンドラインが特定のパターンと一致する場合は、それを関数またはプログラムに提供します。

コマンドラインが特定のパターンと一致する場合は、それを関数またはプログラムに提供します。

私の究極の目標は次のとおりです。

$ 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'() { :; }

関連情報