在特定环境中执行时,脚本输出具有神秘的尾随字符

在特定环境中执行时,脚本输出具有神秘的尾随字符

我正在开发一个项目,需要使用 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显示的字符看起来就像我们的(例如)

结合这两个事实得出一个理论:

  1. Intellij 在打开终端窗口时发出一些转义序列来清理窗口,包括\e[H\e[2J.
  2. Gnome DO 设置一个指向特定终端类型的环境,这与您通常使用的终端不同。
  3. Intellij 从 DO 启动时启动此终端,发出转义序列,然后运行脚本。

啊,但是为什么转义序列出现在脚本输出之后。这并不一定意味着它是打印打印脚本输出后。 Intellij 可能发出其他有效的转义序列,并且它们可能以某种方式移动光标,使行看起来似乎不按顺序排列。

这又是极端在没有所有事实的情况下做出的猜测...但是看看你是否可以在你的系统上找到一个不处理echo上面命令的 Gnome 终端,或者以其他方式检查我的猜测。

相关内容