我有一个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.
是否可以在不使用临时文件的情况下在不同的变量中存储或捕获stdout和stderr ?现在我这样做是为了out
在err
运行时获取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) 我正在编写一个备份数据库的脚本.我有以下几行:
mysqldump --user=$dbuser --password=$dbpswd \
--host=$host $mysqldb | gzip > $filename
Run Code Online (Sandbox Code Playgroud)
我想将stderr分配给一个变量,这样它就会向我发送一封电子邮件,让我知道如果出现问题会发生什么.我找到了将stderr重定向到stdout的解决方案,但我不能这样做,因为stdout已经被发送(通过gzip)到一个文件.如何在变量$ result中单独存储stderr?
Bash如何将stderr捕获到变量?
我想在我的bash脚本中做这样的事情
sh -c path/myExcecutable-bin 2>&1 =MYVARIABLE
Run Code Online (Sandbox Code Playgroud)
如何将stderror输出发送给变量?
我有一个脚本.我想给这个脚本一个安静模式和一个详细模式.
这相当于:
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可以起作用,但对其他变量有明显的副作用.
我有此代码会产生错误,并且可以抑制STDOUT,但不会将STDERR存储在变量ERROR中。
ERROR = $(memtester 900 1 > /dev/null)
Run Code Online (Sandbox Code Playgroud)