1

在 Bash 中,如果我创建一个函数,我可以使用该type命令向我显示该函数定义,如下所示:

# define a function
foo {
    echo "bar"
}

# now show me that definition
$ type foo
foo is a function
foo ()
{
    echo "bar"
}

Zsh 和 Fish 的命令都有相似之处functions。我在这里检查了bash-to-xsh 页面,但找不到等价物。我尝试使用 Python 的inspect,但这也不起作用:

def foo():
  echo "bar"

$ foo
<function __main__.foo>

$ import inspect as i
$ i.getsource(foo)
xonsh: For full traceback set: $XONSH_SHOW_TRACEBACK = True
OSError: could not get source code

您如何在 Xonsh 中显示方法定义?

4

1 回答 1

0

根据这个线程,这似乎是 Python 的一个限制,而不是 Xonsh 的真正问题。

如果 Xonsh 函数在文件中定义,则inspect有效。如果该函数仅在内存中定义,则它不可用。

例如,此代码有效:

import inspect
echo @(inspect.getsource($PROMPT_FIELDS['cwd']))

这样做也是如此:

import inspect
echo "def foo():\n\techo 'bar'\n" > foo.xsh
source foo.xsh
echo @(inspect.getsource(foo))
于 2021-09-20T01:48:59.140 回答