zsh不';t打印从标准输入接收的命令

zsh不';t打印从标准输入接收的命令,zsh,Zsh,使用标准输入(使用选项-i和-s运行)将命令传送到交互式zsh时,它不会打印执行的命令本身,而是在提示符号后立即打印命令输出: $ echo "echo test" | zsh -si % test % $ 在正常交互模式下,它应该如下所示: $ zsh -si % echo test test % 这里的主要问题是,在第一种情况下,echo test命令的输出发生在提示消息之后,而预期将从新行打印。我需要它来测试需要交互环境的命令行应用程序,zsh的这种行为使测试输出分析变得非常复杂 是否

使用标准输入(使用选项
-i
-s
运行)将命令传送到交互式zsh时,它不会打印执行的命令本身,而是在提示符号后立即打印命令输出:

$ echo "echo test" | zsh -si
% test
% $
在正常交互模式下,它应该如下所示:

$ zsh -si
% echo test
test
%
这里的主要问题是,在第一种情况下,
echo test
命令的输出发生在提示消息之后,而预期将从新行打印。我需要它来测试需要交互环境的命令行应用程序,
zsh
的这种行为使测试输出分析变得非常复杂


是否有办法在管道中运行
zsh
,使其与正常交互模式完全相同

如果您想测试命令行应用程序,就像它通过终端进行交互一样,那么您需要在终端中运行它。终端比管道具有更多的功能,许多应用程序(包括zsh)的行为因其输入是否是终端而不同

传递选项
-si
会使zsh启用交互功能,例如在从输入读取命令时显示提示。但它不会激活终端交互功能,例如回显输入和处理键绑定

与终端中运行的应用程序交互的实际标准是和它的模仿者。在Python中,使用

import-pexpect
p=预期产卵(“zsh-f”)
p、 期望值(“%”)
p、 发送线(“回波测试”)
p、 期望(“测试”)

问题在于,标准输入关闭后,shell就会退出,这是在
echo
命令完成并且管道末端关闭后发生的。你可能不想要一根管子,至少不想要一根“未命名”的管子。您能否提供有关如何运行应用程序进行测试的更多详细信息?命令
echo“echo test”| zsh-si
仅用于以最少的代码重现问题。在我的例子中,我使用python运行
zsh
,并通过管道发送命令。主要问题是命令输出发生在
%
符号之后,这使得输出检查复杂化;您确定需要交互式shell吗?不要混淆“交互式shell”和“从shell运行的交互式程序”。