我的最终目标是:
$ python3 -c "print(\"Hello, world!\")"
Hello, world!
$ >>> print("Hello, world!")
Hello, world!
基本上,每次我的命令行以 开头时,我都希望命令行的其余部分通过开关>>>
输入。python3
-c
如果可以声明(和使用)一个>>>
函数,它将按如下方式实现:
>>>() {
python3 -c "$@"
}
作为记录,我正在使用zsh
.
我的第一次尝试是创建一个名为 的别名>>>
,但它在两个 shell 中都无效。接下来我尝试创建一个>>>
函数,尽管它在 ZSH 上有效,但似乎无法调用它(无论是使用>>>
还是\>\>\>
)。
我怎样才能实现这个目标?
答案1
由于这需要在 zsh 解析该行之前发生(因为您需要它是 python 语法,而不是 zsh 语法),因此您需要在小部件中执行此操作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'() { :; }