如何抑制 gradle 的所有输出?

jwi*_*ir3 6 scripting zsh gradle output

我正在为 zsh 编写一个脚本,它本质上只需要知道以下 gradle 命令的退出代码:./gradlew installDebug。换句话说,我不希望在运行时向控制台输出任何内容。我尝试过以下方法: ./gradlew installDebug -q > /dev/null; 2>&1

这消除了 99% 的输出,但我仍然得到如下所示的行:

Note: Generating a MembersInjector for com.example.ui.BaseActivity. Prefer to run the dagger processor over that class instead.
Note: Generating a MembersInjector for com.example.widget.nav.NavigationDrawerActivity. Prefer to run the dagger processor over that class instead.
Note: Generating a MembersInjector for com.example.fragment.ShiftListFragment. Prefer to run the dagger processor over that class instead.
Run Code Online (Sandbox Code Playgroud)

这些警告来自 lint,一般来说,我想保留它(当我手动构建时,没有这个脚本)。我只是想抑制这种特定情况下的输出。

我觉得我根本没有正确重定向给定流的输出。

Ada*_*hon 4

只要你在用zsh就可以用

./gradlew installDebug -q &> /dev/null
Run Code Online (Sandbox Code Playgroud)

对于 POSIX 兼容的 shell(包括zsh),您可以使用

./gradlew installDebug -q > /dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)

它不起作用的原因是分号。A;分隔两个命令,但重定向仅适用于每个命令,而不适用于每个命令行。所以实际发生的情况相当于以下内容:

./gradlew installDebug -q > /dev/null
2>&1
Run Code Online (Sandbox Code Playgroud)
  • 在第一个命令中,标准输出./gradlew被重定向到/dev/null,但标准错误未更改,因此可以正常打印。

  • 第二个实际上只是一个没有命令的重定向。在这种情况下,行为取决于参数NULLCMD和选项SH_NULLCMD和的设置CSH_NULLCMD。默认情况下,zsh运行时cat会应用给定的重定向。