我正在开发一个项目,需要使用 Java 中名为 Appium 的测试框架。 Appium 库尝试在我的机器上运行以下脚本来找出我的 NodeJS 安装位置(并不重要,它是节点):
#!bin/sh
OUTPUT="$(npm root -g)"
echo "${OUTPUT}"
exit
该脚本是在我的 Java JUnit 单元测试期间使用 bash 显式执行的。看这个链接查看 Appium 用于运行脚本的代码。在我的系统上,如果我从 shell(使用 zsh、bash 或 sh)执行此命令,我会得到以下输出:
/home/me/node-v8.9.0-linux-x64/lib/node_modules
伟大的。由于某种原因,当相同的脚本在我的 IDE (IntelliJ) 设置的环境中运行时,输出如下:
/home/me/node-v8.9.0-linux-x64/lib/node_modules
[H[2J
不管这对于 Appium 来说是否是一个好主意,它都会因为额外的\r\r\n[H[2J
.我通常在 Ubuntu MATE 上通过一个名为 GnomeDO 的程序启动 IntelliJ。在看到我$PATH
的 IntelliJ 在运行时与我的预期不同后,我将其关闭并从我的 shell 中启动它。这$PATH
是正确的,尾随输出停止了。
从 Linux 桌面环境启动应用程序与从 shell 启动应用程序有什么不同,会导致尾随不可读字符?
答案1
注意:我一直在评论中进行理论分析,这捕获了这些想法和高度推测性的结论。
这些时髦的角色看起来很可疑转义序列它将光标移动到终端的顶部(左上角?),然后清除屏幕。您可以通过在 shell 中执行以下操作来查看其实际效果echo -e '\e[H\e[2J'
:
我做了一些搜索,发现了一些对 Gnome 终端的引用,这些终端对转义序列的支持不完整,并且对于问题序列,[H
显示的字符看起来就像我们的(例如)
结合这两个事实得出一个理论:
- Intellij 在打开终端窗口时发出一些转义序列来清理窗口,包括
\e[H\e[2J
. - Gnome DO 设置一个指向特定终端类型的环境,这与您通常使用的终端不同。
- Intellij 从 DO 启动时启动此终端,发出转义序列,然后运行脚本。
啊,但是为什么转义序列出现在脚本输出之后。这并不一定意味着它是打印打印脚本输出后。 Intellij 可能发出其他有效的转义序列,并且它们可能以某种方式移动光标,使行看起来似乎不按顺序排列。
这又是极端在没有所有事实的情况下做出的猜测...但是看看你是否可以在你的系统上找到一个不处理echo
上面命令的 Gnome 终端,或者以其他方式检查我的猜测。