我有一个相当复杂的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”状态“成功”未保存在我的变量中并直接写入屏幕。
那么如何将所有输出重定向/保存到变量中而不是将其转储到屏幕上呢?
答案 0 :(得分:3)
问题在于:
output=$(liquibase --"lots of parameters here") > /dev/null 2> /dev/null
当您这样说时,STDOUT
和STDERR
重定向会变得毫无用处。您将继续在终端上看到STDERR
。
为了将命令的STDOUT
和STDERR
重定向到变量中,请说:
output=$(liquibase --"lots of parameters here" 2>&1)
为了将STDOUT
重定向到变量并完全丢弃错误,请说:
output=$(liquibase --"lots of parameters here" 2>/dev/null)