2

我正在尝试使用 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 | tee”组合与其他命令一起使用,但由于某种原因,我似乎无法同时将 aria2c 捕获到两者。任何人都可以通过 bash 脚本做到这一点吗?

4

1 回答 1

1

由于 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,后者会显示在您的屏幕上。

于 2017-08-03T00:47:59.680 回答