Apt

格式化終端輸出以在 RED 中顯示 apt-get upgrade 錯誤

  • November 14, 2014

我為我的 Kali Linux 發行版編寫了一個非常簡單的 bash 腳本,因此我不必 每次打開筆記型電腦時都執行apt-get updateapt-get upgradeapt-get dist-upgradeapt-get autoclean和e 。apt-get autoremov

在閱讀了幾天的語法後,我仍然無法正確理解。我正在嘗試在腳本中添加一些內容來格式化終端輸出,它將在 RED 中顯示“錯誤”。任何幫助將不勝感激在我的腳本中添加一些內容,這將在 RED 中顯示 apt-get upgrade 輸出錯誤。先感謝您。

僅供參考,這是我的兩行腳本…

apt-get update && apt-get upgrade -y && apt-get dist-upgrade -y && apt-get autoremove -y && apt-get autoclean -y

我寫了一個小腳本,它會為你給它的任何字元串著色:

#!/usr/bin/env perl
use Getopt::Std;
use strict;
use Term::ANSIColor; 

my %opts;
getopts('hic:l:',\%opts);
   if ($opts{h}){
     print<<EoF; 
Use -l to specify the pattern(s) to highlight. To specify more than one 
pattern use commas. 

-l : A Perl regular expression to be colored. Multiple expressions can be
    passed as comma separated values: -l foo,bar,baz
-i : makes the search case sensitive
-c : comma separated list of colors;

EoF
     exit(0);
   }

my $case_sensitive=$opts{i}||undef;
my @color=('bold red','bold blue', 'bold yellow', 'bold green', 
          'bold magenta', 'bold cyan', 'yellow on_magenta', 
          'bright_white on_red', 'bright_yellow on_red', 'white on_black');
if ($opts{c}) {
  @color=split(/,/,$opts{c});
}
my @patterns;
if($opts{l}){
    @patterns=split(/,/,$opts{l});
}
else{
   $patterns[0]='\*';
}

# Setting $| to non-zero forces a flush right away and after 
# every write or print on the currently selected output channel. 
$|=1;

while (my $line=<>) 
{ 
   for (my $c=0; $c<=$#patterns; $c++){
   if($case_sensitive){
       if($line=~/$patterns[$c]/){
          $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ge;
       }
   }
   else{
       if($line=~/$patterns[$c]/i){
         $line=~s/($patterns[$c])/color("$color[$c]").$1.color("reset")/ige;
       }
     }
   }
   print STDOUT $line;
}

如果您將其保存color在您的目錄中$PATH並使其可執行(chmod +x /usr/bin/color),您可以隨意著色:

sudo apt-get install nonexistent-package 2>&1 | color -l "E:,error"

2>&1需要將錯誤消息重定向到標準輸出。

引用自:https://unix.stackexchange.com/questions/167828