bash无法将aria2c的输出捕获到变量和标准输出

时间:2017-08-02 21:35:47

标签: bash variables stdout capture aria2

我正在尝试使用aria2c下载文件。该命令如下所示:

aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath

当以这种方式运行时,该命令可以完美地从脚本中运行。我尝试做的是将命令的输出捕获到变量,并仍然实时显示在屏幕上。

我已使用以下方法成功将输出捕获到变量:

VAR=$(aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath)

但是,在这种情况下,屏幕上会出现很长的延迟,而下载过程中没有更新。我在脚本中的这一行之后有一个echo命令,$ VAR已经捕获了所有的aria2c下载数据。

我尝试过使用2>& 1和|的不同组合命令末尾的tee / dev / tty,但实时显示中没有任何内容。

Example:
VAR=$(aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath 2>&1)
VAR=$(aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath 2>&1 | tee /dev/tty )
VAR=$(aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath | tee /dev/tty )
VAR=$((aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath) 2>&1)
VAR=$((aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath) 2>&1 | tee /dev/tty )
VAR=$((aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath) 2>&1 ) | tee /dev/tty )

我已经能够使用" 2>& 1 |三通"之前与其他命令的组合,但出于某种原因,我似乎无法同时捕获aria2c。任何人都有幸从bash脚本中做到这一点吗?

1 个答案:

答案 0 :(得分:0)

由于aria2c似乎输出到stdout,请考虑将tee转换为stderr:

var=$(aria2c --http-user=$USER --http-passwd=$usepw -x 16 -s 100 $urlPath | tee /dev/fd/2)

stdout最终在var,而tee将其复制到stderr,显示在屏幕上。