相关疑难解决方法(0)

将stdout捕获到变量但仍在控制台中显示它

我有一个bash脚本调用几个长时间运行的进程.我想根据处理原因将这些调用的输出捕获到变量中.但是,因为这些是长时间运行的进程,所以我希望rsync调用的输出实时显示在控制台中,而不是事后.

为此,我找到了一种方法,但它依赖于将文本输出到/ dev/stderr.我觉得输出到/ dev/stderr并不是一种好的做事方式.

VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr)

VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr)

VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我调用rsync几次,我想看到文件名在处理时,但最后我还是想在变量中输出,因为我稍后会解析它.

是否有一种"更清洁"的方式来实现这一目标?

如果它有所作为,我使用的是Ubuntu 12.04,bash 4.2.24.

bash ubuntu tee process-substitution

66
推荐指数
5
解决办法
3万
查看次数

将stdout和stderr捕获到不同的变量中

是否可以在不使用临时文件的情况下在不同的变量中存储或捕获stdout和stderr ?现在我这样做是为了outerr运行时获取stdout 和stderr some_command,但是我想避开临时文件.

error_file=$(mktemp)
out=$(some_command 2>$error_file)
err=$(< error_file)
rm $error_file
Run Code Online (Sandbox Code Playgroud)

bash shell command-line io-redirection

62
推荐指数
8
解决办法
3万
查看次数

Bash脚本 - 将stderr存储在变量中

我正在编写一个备份数据库的脚本.我有以下几行:

mysqldump --user=$dbuser --password=$dbpswd  \
   --host=$host $mysqldb | gzip > $filename
Run Code Online (Sandbox Code Playgroud)

我想将stderr分配给一个变量,这样它就会向我发送一封电子邮件,让我知道如果出现问题会发生什么.我找到了将stderr重定向到stdout的解决方案,但我不能这样做,因为stdout已经被发送(通过gzip)到一个文件.如何在变量$ result中单独存储stderr?

bash scripting redirect stdout stderr

48
推荐指数
3
解决办法
6万
查看次数

Bash如何将stderr捕获到变量?

Bash如何将stderr捕获到变量?

我想在我的bash脚本中做这样的事情

sh -c path/myExcecutable-bin 2>&1 =MYVARIABLE
Run Code Online (Sandbox Code Playgroud)

如何将stderror输出发送给变量?

bash stderr

43
推荐指数
1
解决办法
4万
查看次数

如何有条件地将命令输出重定向到/ dev/null?

我有一个脚本.我想给这个脚本一个安静模式和一个详细模式.

这相当于:

if $verbose
then
  redirect="> /dev/null"
fi

echo "Verbose mode enabled" $redirect # This doesn't work because the redirect isn't evaluated.
Run Code Online (Sandbox Code Playgroud)

我真的想要一个更好的方法,比为每个受影响的语句编写if-elses.

eval可以起作用,但对其他变量有明显的副作用.

bash redirect

14
推荐指数
3
解决办法
4325
查看次数

将STDERR重定向到变量

我有此代码会产生错误,并且可以抑制STDOUT,但不会将STDERR存储在变量ERROR中。

ERROR = $(memtester 900 1 > /dev/null)
Run Code Online (Sandbox Code Playgroud)

linux bash shell stdout stderr

3
推荐指数
1
解决办法
2059
查看次数