diff --git a/inxi b/inxi index 4e260c0..3265da1 100755 --- a/inxi +++ b/inxi @@ -1,7 +1,7 @@ #!/bin/bash ######################################################################## #### Script Name: inxi -#### version: 1.7.4 +#### version: 1.7.5 #### Date: June 20 2011 #### Patch Number: 00 ######################################################################## @@ -57,7 +57,7 @@ #### http://lists.gnu.org/archive/html/bug-bash/2004-08/msg00144.html #### Bash 3.1 for proper array use #### -#### Arrays work in bash 2.05b, but "egrep -m" does not +#### Arrays work in bash 2.05b, but "grep -Em" does not #### #### RECOMMENDS (Needed to run certain features, listed by option) #### -A - for output of usb audio information: lsusb (usbutils) @@ -112,19 +112,20 @@ #### Arrays should start with a_ (local) or A_ (global). #### #### SPECIAL NOTES: -#### The color variable ${C2} must always be followed by a space unless you know what -#### character is going to be next for certain. Otherwise irc color codes can be accidentally -#### activated or altered. -#### -#### For native script konversation support (check distro for correct konvi scripts path): -#### ln -s /usr/share/apps/konversation/scripts/inxi -#### DCOP doesn't like \n, so avoid using it for most output unless required, as in error messages. +#### * The color variable ${C2} must always be followed by a space unless you know what +#### character is going to be next for certain. Otherwise irc color codes can be accidentally +#### activated or altered. +#### * For native script konversation support (check distro for correct konvi scripts path): +#### ln -s /usr/share/apps/konversation/scripts/inxi +#### DCOP doesn't like \n, so avoid using it for most output unless required, as in error messages. +#### * print_screen_output " " # requires space, not null, to avoid error in for example in irssi +#### * For logging of array data, array must be placed into the temp_array, otherwise only the first key logs +#### * In gawk search patterns, . is a wildcard EXCEPT in [0-9.] type containers, then it's a literal +#### So outside of bracketed items, it must be escaped, \. but inside, no need. Outside of gawk it should +#### be escaped in search patterns if you are using it as a literal. #### #### As with all 'rules' there are acceptions, these are noted where used. #### -#### print_screen_output " " # requires space, not null, to avoid error in for example in irssi -#### For logging of array data, array must be placed into the temp_array, otherwise only the first key logs -#### ################################################################################### #### KDE Konversation information. Moving from dcop(qt3/KDE3) to dbus(qt4/KDE4) ################################################################################### @@ -481,15 +482,10 @@ DISTROS_LSB_GOOD="mandrake-release mandriva-release mandrakelinux-release" # Puppy Linux 4.1.2 (Bash 3.0: arrays won't work) --> works partially ### Bans Data -# Precede a banword with $'\2' to prevent it from being subject to automated escaping by the make_ban_lists routine -# $'\1' gets weird results : -# user@host $ ARR=($'\x01'"one two" three four); echo ${ARR[0]} | hd -v -# 00000000 01 01 6f 6e 65 20 74 77 6f 0a |..one two.| -A_NORMAL_BANS=( computing computer corporation communications electronics electrical electric gmbh group industrial international revision software technologies technology $'\2'"\" ltd. ltd $'\2'"\" intl. inc. $'\2'\ co. corp. "(tm)" "(r)" "®" $'\2'"\(rev ..\)" ) -A_CPU_BANS=( @ cpu deca 'dual core' dual-core 'tri core' tri-core 'quad core' quad-core ennea genuine hepta hexa multi octa penta 'processor' processor single triple $'\2'"[0-9.]+ *[MmGg][Hh][Zz]" ) -# after processing, the ban arrays will be put into these: -BAN_LIST_NORMAL='' -BAN_LIST_CPU='' +# Note that \ bans only words, not parts of strings; in \ you can't use punctuation characters like . or , +# we're saving about 10% of the exec time by hand building the ban lists here, using hard quotes. +BAN_LIST_NORMAL='computing|computer|corporation|communications|electronics|electrical|electric|gmbh|group|industrial|international|revision|software|technologies|technology|\|ltd\.|\|inc\.|intl\.|\|co\.|corp\.|\(tm\)|\(r\)|®|\(rev ..\)' +BAN_LIST_CPU='@|cpu deca|dual core|dual-core|tri core|tri-core|quad core|quad-core|ennea|genuine|hepta|hexa|multi|octa|penta|processor|single|triple|[0-9\.]+ *[MmGg][Hh][Zz]' ### USB networking search string data, because some brands can have other products than ### wifi/nic cards, they need further identifiers, with wildcards. @@ -521,19 +517,7 @@ main() # Not all distro's have these depends installed by default check_script_depends check_script_suggested_apps - - # note: this needs to go AFTER depends check because these use gawk - # Do this after sourcing of config overrides so user can customize banwords - # Contrary to my previous belief, "${ARR[@]}" passes a quoted list, not one string - BAN_LIST_NORMAL=$( make_ban_lists "${A_NORMAL_BANS[@]}" ) - BAN_LIST_CPU=$( make_ban_lists "${A_CPU_BANS[@]}" ) - # echo "BAN_LIST_NORMAL='$BAN_LIST_NORMAL'" - # echo "BAN_LIST_CPU='$BAN_LIST_CPU'" - # first init function must be set first for colors etc. Remember, no debugger - # stuff works on this function unless you set the debugging flag manually. - # Debugging flag -@ [number] will not work until get_parameters runs. - ### Only continue if depends ok SCRIPT_PATH=$( dirname $0 ) SCRIPT_VERSION_NUMBER=$( grep -im 1 'version:' $SCRIPT_PATH/$SCRIPT_NAME | gawk '{print $3}' ) @@ -587,7 +571,11 @@ main() # print_screen_output "DCPORT: $DCPORT" # print_screen_output "DCSERVER: $DCSERVER" # print_screen_output "DCTARGET: $DCTARGET" - + + # first init function must be set first for colors etc. Remember, no debugger + # stuff works on this function unless you set the debugging flag manually. + # Debugging flag -@ [number] will not work until get_parameters runs. + # "$@" passes every parameter separately quoted, "$*" passes all parameters as one quoted parameter. # must be here to allow debugger and other flags to be set. get_parameters "$@" @@ -843,34 +831,6 @@ sanitize_characters() eval $LOGFE } -# Filter boilerplate & buzzwords. -# args: $1 - quoted: "$@" array of ban terms -make_ban_lists() -{ - eval $LOGFS - local ban_list='' - # Iterate over $@ - ## note: this is a weird, non-intuitive method, needs some documentation or rewriting - ## if you declare ban_string it stops working, have to read up on this - for ban_string - do - # echo "term=\"$ban_string\"" # >&2 - if [[ ${ban_string:0:1} = $'\2' ]];then - ban_list="${ban_list}${ban_list+|}${ban_string:1:${#ban_string}-1}" - else - # Automatically escapes [ ] ( ) . and + - ban_list="${ban_list}${ban_list+|}$( echo "$ban_string" | gawk '{ - gsub(/([\[\]+().])/,"\\\\&") - print - }' )" - fi - done - - echo "$ban_list" - eval $LOGFS -} -# make_ban_lists "${A_CPU_BANS[@]}";exit - # Set the colorscheme # args: $1 = |<"none"> set_color_scheme() @@ -2590,7 +2550,7 @@ get_audio_data() IFS=$'\n' # this first step handles the drivers for cases where the second step fails to find one - device_count=$( echo "$Lspci_Data" | egrep -ic '(multimedia audio controller|audio device)' ) + device_count=$( echo "$Lspci_Data" | grep -iEc '(multimedia audio controller|audio device)' ) if [[ $device_count -eq 1 ]] && [[ $B_ASOUND_DEVICE_FILE == 'true' ]];then alsa_driver=$( gawk -F ']: ' ' BEGIN { @@ -2618,7 +2578,7 @@ get_audio_data() IGNORECASE=1 } /multimedia audio controller|audio device/ { - audioCard=gensub(/^[0-9a-f:.]+ [^:]+: (.+)$/,"\\1","g",$0) + audioCard=gensub(/^[0-9a-f:\.]+ [^:]+: (.+)$/,"\\1","g",$0) # The doublequotes are necessary because of the pipes in the variable. gsub(/'"$BAN_LIST_NORMAL"'/, "", audioCard) gsub(/,/, " ", audioCard) @@ -2786,7 +2746,7 @@ get_audio_alsa_data() # some alsa strings have the build date in (...) # remove trailing . and remove possible second line if compiled by user $0 !~ /compile/ { - gsub( "Driver | [(].*[)]|\.$","",$0 ) + gsub( /Driver | [(].*[)]|\.$/,"",$0 ) gsub(/,/, " ", $0) gsub(/^ +| +$/, "", $0) gsub(/ [ \t]+/, " ", $0) @@ -3301,7 +3261,7 @@ get_distro_data() log_function_data "distro_file: $distro_file" # first test for the legacy antiX distro id file if [[ -e /etc/antiX ]];then - distro="$( egrep -oi 'antix.*\.iso' <<< $( remove_erroneous_chars '/etc/antiX' ) | sed 's/\.iso//' )" + distro="$( grep -Eoi 'antix.*\.iso' <<< $( remove_erroneous_chars '/etc/antiX' ) | sed 's/\.iso//' )" # this handles case where only one release/version file was found, and it's lsb-release. This would # never apply for ubuntu or debian, which will filter down to the following conditions. In general # if there's a specific distro release file available, that's to be preferred, but this is a good backup. @@ -3929,14 +3889,14 @@ get_hard_drive_data_advanced() ## check for all ide type drives, non libata, only do it if hdx is in array ## this is now being updated for new /sys type paths, this may handle that ok too - if [[ -n $( egrep 'hd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then + if [[ -n $( grep -E 'hd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then # remember, we're using the last array item to store the total size of disks for (( i=0; i < ${#A_HDD_DATA[@]} - 1; i++ )) do IFS="," a_temp_working=( ${A_HDD_DATA[i]} ) IFS="$ORIGINAL_IFS" - if [[ -n $( egrep '^hd[a-z]' <<< ${a_temp_working[0]} ) ]];then + if [[ -n $( grep -E '^hd[a-z]' <<< ${a_temp_working[0]} ) ]];then if [[ -e /proc/ide/${a_temp_working[0]}/model ]];then a_temp_working[2]="$( remove_erroneous_chars /proc/ide/${a_temp_working[0]}/model )" else @@ -3991,12 +3951,12 @@ get_hard_drive_data_advanced() IFS="$ORIGINAL_IFS" ## then we'll loop through that array looking for matches. - if [[ -n $( egrep 'sd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then + if [[ -n $( grep -E 'sd[a-z]' <<< ${A_HDD_DATA[@]} ) ]];then # first pack the main ls variable so we don't have to keep using ls /dev... ls_disk_by_id="$( ls -l /dev/disk/by-id )" for (( i=0; i < ${#A_HDD_DATA[@]} - 1; i++ )) do - if [[ -n $( egrep '^sd[a-z]' <<< ${A_HDD_DATA[$i]} ) ]];then + if [[ -n $( grep -E '^sd[a-z]' <<< ${A_HDD_DATA[$i]} ) ]];then IFS="," a_temp_working=( ${A_HDD_DATA[$i]} ) IFS="$ORIGINAL_IFS" @@ -4012,7 +3972,7 @@ get_hard_drive_data_advanced() # discovered disk name AND ends with the correct identifier, sdx # get rid of whitespace for some drive names and ids, and extra data after - in name temp_name=$( tr ' ' '_' <<< ${a_temp_scsi[$j]} | cut -d '-' -f 1 ) - sd_ls_by_id=$( egrep -m1 ".*$temp_name.*${a_temp_working[0]}$" <<< "$ls_disk_by_id" ) + sd_ls_by_id=$( grep -Em1 ".*$temp_name.*${a_temp_working[0]}$" <<< "$ls_disk_by_id" ) if [[ -n $sd_ls_by_id ]];then temp_name=${a_temp_scsi[$j]} @@ -4029,7 +3989,7 @@ get_hard_drive_data_advanced() if [[ -z $temp_name ]];then temp_name="Name n/a" else - usb_exists=$( egrep -m1 "usb-.*$temp_name.*${a_temp_working[0]}$" <<< "$ls_disk_by_id" ) + usb_exists=$( grep -Em1 "usb-.*$temp_name.*${a_temp_working[0]}$" <<< "$ls_disk_by_id" ) if [[ -n $usb_exists ]];then a_temp_working[3]='USB' fi @@ -4215,7 +4175,7 @@ get_networking_data() IGNORECASE=1 counter=0 # required to handle cases of > 1 instance of the same chipset } - /^[0-9a-f:.]+ (ethernet|network) (controller|bridge)/ || /^[0-9a-f:.]+ [^:]+: .*(ethernet|network).*$/ { + /^[0-9a-f:\.]+ (ethernet|network) (controller|bridge)/ || /^[0-9a-f:\.]+ [^:]+: .*(ethernet|network).*$/ { nic=gensub(/^[0-9a-f:\.]+ [^:]+: (.+)$/,"\\1","g",$0) gsub(/realtek semiconductor/, "Realtek", nic) gsub(/davicom semiconductor/, "Davicom", nic) @@ -5723,12 +5683,12 @@ calculate_multicore_data() eval $LOGFS local string_number=$1 string_data='' - if [[ -n $( egrep -i '( mb| kb)' <<< $1 ) ]];then + if [[ -n $( grep -Ei '( mb| kb)' <<< $1 ) ]];then string_data=" $( gawk '{print $2}' <<< $1 )" # add a space for output string_number=$( gawk '{print $1}' <<< $1 ) fi # handle weird error cases where it's not a number - if [[ -n $( egrep '^[0-9\.,]+$' <<< $string_number ) ]];then + if [[ -n $( grep -E '^[0-9\.,]+$' <<< $string_number ) ]];then string_number=$( echo $string_number $2 | gawk '{ total = $1*$2 print total