将自动更新的文本输出到屏幕和文件

我试图采取我已经更新我的系统的脚本,并将其输出到文件和屏幕的文本。 除了我的更新pipe理器, pacman ,输出相同types的文本,比如wget ,这很简单。 这里有一些示例输出。

  core 107.0 KiB 392K/s 00:00 [################################################################] 100% extra 1531.8 KiB 719K/s 00:02 [################################################################] 100% community 2.1 MiB 818K/s 00:03 [################################################################] 100% 

当我尝试使用tee将这种输出redirect到一个文件时,这是我得到我的屏幕和文件的输出。

 :: Synchronizing package databases... downloading core.db... downloading extra.db... downloading community.db... 

我知道这是因为pacman使用缓冲区输出到屏幕,但我仍然希望有一种方法,我可以输出到屏幕和文件的状态,而不仅仅是“下载xyz …”。

预先感谢您的任何帮助。

编辑:

我目前没有更新,但是这里有一些与安装Opera浏览器非常相似的示例输出。 百分比和英镑符号的行是随着下载进度而更新的缓冲区。

 resolving dependencies... looking for inter-conflicts... Packages (1): opera-12.16.1860-2 Total Download Size: 10.49 MiB Total Installed Size: 45.03 MiB :: Proceed with installation? [Y/n] y :: Retrieving packages ... opera-12.16.1860-2-x86_64 13.4 MiB 1151K/s 00:12 [################################################################] 100% (1/1) checking keys in keyring [################################################################] 100% (1/1) checking package integrity [################################################################] 100% (1/1) loading package files [################################################################] 100% (1/1) checking for file conflicts [################################################################] 100% (1/1) checking available disk space [################################################################] 100% (1/1) installing opera [################################################################] 100% Optional dependencies for opera gstreamer0.10-base-plugins: HTML5 Video support gstreamer0.10-good: HTML5 Video support 

这就是上面的输出通过teeredirect时的样子。

 warning: opera-12.16.1860-2 is up to date -- reinstalling resolving dependencies... looking for inter-conflicts... Packages (1): opera-12.16.1860-2 Total Installed Size: 45.03 MiB Net Upgrade Size: 0.00 MiB :: Proceed with installation? [Y/n] y checking keyring... checking package integrity... loading package files... checking for file conflicts... checking available disk space... reinstalling opera... 

如您所见,下载过程不显示。 只有三个时期。

请注意,如果我完全理解这个问题,但是我想可能是你的脚本输出到stdout和stderr,并且你希望这两个文件都被捕获到文件中,并且显示在终端上。 在这种情况下,你可以通过将脚本的stderr重定向到stderr来完成,

 ./myscript.sh 2>&1 | tee output.log 

所以我想你也想要所有的输出相对于进度条等。你可以使用script命令来得到这个:

 script -e -q -c "./myscript.sh" output.log 

这对我工作wget

终端输出:

 ubuntu @ ubuntu:〜$ script -e -q -c“wget http://stackoverflow.com”output.log
 -  2014年2月21日20:01:31  -  http://stackoverflow.com/
正在解决stackoverflow.com(stackoverflow.com)... 198.252.206.140
连接到stackoverflow.com(stackoverflow.com)| 198.252.206.140 |:80 ...连接。
发送HTTP请求,等待响应... 200 OK
长度:214108(209K)[text / html]
保存到:`index.html.5'

 100%[========================================]在38s中214,108 7.59K / s     

上次修改的标题无效 - 忽略时间戳。
 2014-02-21 20:02:13(5.55 KB / s) - `index.html.5'保存[214108/214108]

 Ubuntu的@ Ubuntu的:〜$

output.log的内容:

脚本开始于2014年2月21日星期五08:01:31 PM PST
 -  2014年2月21日20:01:31  -  http://stackoverflow.com/
正在解决stackoverflow.com(stackoverflow.com)... 198.252.206.140
连接到stackoverflow.com(stackoverflow.com)| 198.252.206.140 |:80 ...连接。
发送HTTP请求,等待响应... 200 OK
长度:214108(209K)[text / html]
保存到:`index.html.5'


  0%[] 0  -  .- K / s              
  1%[] 3,367 3.66K / s              
  2%[5,863 5.09K / s]              
  3%[7] 1111 3.54K / s              
  5%[>] 10,855 3.73K / s              

 ###输出省略 - 我现在有一个很慢的连接###

 97%[=====================================>] 209,806 7.84K / s eta 1s      
 99%[=====================================>] 212,302 7.44K / s eta 1s      
 100%[========================================]在38s中214,108 7.59K / s     

上次修改的标题无效 - 忽略时间戳。
 2014-02-21 20:02:13(5.55 KB / s) - `index.html.5'保存[214108/214108]