2013-11-22 47 views
1

我有一段相当复杂的bash脚本来运行不同的配置,并安装了大量的Oracle模式,在此期间我需要调用“liquibase”这是一个Java软件。使用bash脚本(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:[email protected]:oracle:thin:@localhost is up to date 

正如你可以看到“Liquibase‘状态’成功”是不保存在我的变量,并直接写入到屏幕。

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

回答

3

的问题是:

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

当你这么说的STDOUTSTDERR重定向变得毫无用处。您将继续在终端上看到STDERR

为了重定向两个STDOUT和命令入变量的STDERR,说:

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

为了重定向STDOUT入变量和完全丢弃错误,说:

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

哇,这么简单,和往常一样,我有点愚蠢:) – kali

+0

只是一个侧面的问题,你认为我可以重定向标准输入变量和stderror到另一个变量,而无需运行liquibase命令两次 – kali

+1

@kali [这个问题](http://stackoverflow.com/questions/11027679/bash-store-stdout-and-stderr-in-different-variables)可能会回答你想要的。 – devnull