Zsh python3()是做什么的?

Zsh python3()是做什么的?,zsh,Zsh,在尝试使用python命令行界面在命令行上执行timeit命令时,我意外地将.function放在命令的外部,如下所示: $ python3 -m timeit '<code>'.function() 不是执行timeit命令,而是这样提示我: function> 认为我已经进入了python repl,我试图用q退出。是的,我知道戒烟是正确的方法。返回到命令行后,我注意到了错误,并按如下方式进行了更正: $ python3 -m timeit `<code>.

在尝试使用python命令行界面在命令行上执行timeit命令时,我意外地将.function放在命令的外部,如下所示:

$ python3 -m timeit '<code>'.function()
不是执行timeit命令,而是这样提示我:

function>
认为我已经进入了python repl,我试图用q退出。是的,我知道戒烟是正确的方法。返回到命令行后,我注意到了错误,并按如下方式进行了更正:

$ python3 -m timeit `<code>.function()`
我希望此代码能够正确执行,但我收到了以下错误:

python3:7: command not found: q
在与一些同事讨论之后,有人建议我检查正在使用的python:

$ which python3
python3 () {
    q
}
这不是我所期望的!通常结果是/usr/local/bin/python3。通过一些尝试和错误,我能够确定重现这一点的最小案例是:

$ python3 ()
function> q
$ 
现在背景已经不存在了,我对我亲眼目睹的行为有两个问题: 1.蟒蛇3到底做什么? 2.如何在同一终端窗口中将执行返回到其原始状态?我知道我可以打开一个新的终端窗口,并且该窗口中存在原始状态。

符合POSIX的shell(如bash、dash和zsh)中使用了foo语法来定义函数。整个代码段定义了一个名为python3的函数,并在运行时执行命令q。您可以使用以下命令绕过shell函数和别名:command-p python3 myfile.py

要从当前shell进程中删除该函数,可以使用unset-f python3。如果它在启动新shell之后不断返回,那么它很可能是在您的一个shell初始化文件中定义的。

符合POSIX的shell(如bash、dash和zsh)中使用foo语法来定义函数。整个代码段定义了一个名为python3的函数,并在运行时执行命令q。您可以使用以下命令绕过shell函数和别名:command-p python3 myfile.py



要从当前shell进程中删除该函数,可以使用unset-f python3。如果它在启动新shell后不断返回,那么它很可能是在您的shell初始化文件中定义的。

请注意,在此上下文中,任何关于哪个的问题都是zsh问题,而不是python问题。或bash或dash@RayWu,不,特别是zsh。在bash或dash中,这是一个外部命令,无法访问shell函数。需要运行python3类型或声明-f python3才能在bash中获得用该名称标识函数的等效输出。我已经更新了标记,表明这与zsh有关,谢谢大家的澄清!请注意,在此上下文中,任何与之相关的问题都是zsh问题,而不是python问题dash@RayWu,不,特别是zsh。在bash或dash中,这是一个外部命令,无法访问shell函数。需要运行python3类型或声明-f python3才能在bash中获得用该名称标识函数的等效输出。我已经更新了标记,表明这与zsh有关,谢谢大家的澄清!声称zsh符合POSIX是不准确的;它甚至不尝试与POSIX兼容,除非在sh兼容模式下运行。@CharlesDuffy这是真的,bash也不完全与POSIX兼容。有没有更好的术语来将这些shell组合在一起?我所知道的唯一一个bash不兼容的地方是当xpg_echo和posix标志都不活动时的echo实现,而不是将扩展放在未定义的空间中。这比不实现POSIX定义的分词规则要窄得多。坦白地说,我根本不认为ZSH是家庭的一部分。@ CharlesDuffy,你不认为在SH兼容模式下运行是否符合POSIX的要求?也就是说,答案可以简单地说foo是用于定义函数的符合POSIX的语法,而不涉及shell的任何其他方面。不过,重要的一点是,zsh扩展了函数定义语法,允许在同一定义中使用多个函数名。OP的输入错误还定义了名为-m、timeit和.function的函数;它甚至不尝试与POSIX兼容,除非在sh兼容模式下运行。@CharlesDuffy这是真的,bash也不完全与POSIX兼容。有没有更好的术语来将这些shell组合在一起?我所知道的唯一一个bash不兼容的地方是当xpg_echo和posix标志都不活动时的echo实现,而不是将扩展放在未定义的空间中。这比不实现POSIX定义的分词规则要窄得多。坦白地说,我根本不认为ZSH是家庭的一部分。@ CharlesDuffy,你不认为在SH兼容模式下运行是否符合POSIX的要求?也就是说,答案可以简单地说foo是符合POSIX的sy
ntax用于定义函数,而不涉及shell的任何其他方面。不过,重要的一点是,zsh扩展了函数定义语法,允许在同一定义中使用多个函数名。OP的输入错误还定义了名为-m、timeit和.function的函数。