使用bash脚本重定向java输出(liquibase)

时间:2013-11-22 14:33:13

标签: java bash shell liquibase

我有一个相当复杂的bash脚本来运行不同的配置并安装大量的Oracle模式,在此期间我需要调用“liquibase”这是一个java软件。

我想做的是完全静音liquibase的输出并根据输出有条件地处理这些输出。

我尝试按照以下方式执行此操作

#!/bin/bash
output=$(liquibase --"lots of parameters here") > /dev/null 2> /dev/null
echo "from the variable:$output"

与输出的“某些”部分相同,进入我的变量,但仍然在屏幕上显示其他部分。例如,我得到:

Liquibase 'status' Successful
from the variable:PROCESS10@jdbc:oracle:thin:@localhost is up to date

正如您所见,“Liquibase”状态“成功”未保存在我的变量中并直接写入屏幕。

那么如何将所有输出重定向/保存到变量中而不是将其转储到屏幕上呢?

1 个答案:

答案 0 :(得分:3)

问题在于:

output=$(liquibase --"lots of parameters here") > /dev/null 2> /dev/null

当您这样说时,STDOUTSTDERR重定向会变得毫无用处。您将继续在终端上看到STDERR

为了将命令的STDOUTSTDERR重定向到变量中,请说:

output=$(liquibase --"lots of parameters here" 2>&1)

为了将STDOUT重定向到变量并完全丢弃错误,请说:

output=$(liquibase --"lots of parameters here" 2>/dev/null)