Apt
格式化終端輸出以在 RED 中顯示 apt-get upgrade 錯誤
我為我的 Kali Linux 發行版編寫了一個非常簡單的 bash 腳本,因此我不必 每次打開筆記型電腦時都執行
apt-get update
、apt-get upgrade
、apt-get dist-upgrade
、apt-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
需要將錯誤消息重定向到標準輸出。