From d8c236841890e3076d655416d7caf809fd738ce8 Mon Sep 17 00:00:00 2001 From: inxi-svn Date: Sat, 25 Jun 2011 01:17:16 +0000 Subject: [PATCH] major fix for ip addr output, handled weak cases, now it inserts a newline before each record item with sed to create discrete records for gawk to parse easily. this solves the problem exposed when there is no ipv6 output, and thus the last line used to test for end of record was vanished. now it's all just treated like ifconfig except a few small differences of which item to slice out. --- inxi | 46 +++++++++++++++++++++++++++------------------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/inxi b/inxi index e4869f9..e00b28b 100755 --- a/inxi +++ b/inxi @@ -1,7 +1,7 @@ #!/bin/bash ######################################################################## #### Script Name: inxi -#### version: 1.7.11 +#### version: 1.7.12 #### Date: June 24 2011 #### Patch Number: 00 ######################################################################## @@ -1310,6 +1310,7 @@ debug_data_collector() xiin_data_file=$SCRIPT_DATA_DIR/$debug_data_dir/xiin-sys.txt echo 'Collecting networking data...' ifconfig &> $debug_data_dir/ifconfig.txt + ip addr &> $debug_data_dir/ip-addr.txt if [[ $b_run_xiin == 'true' ]];then echo "Running $xiin_file tool now on /sys..." python ./$xiin_file -d /sys -f $xiin_data_file @@ -4524,7 +4525,7 @@ get_networking_local_ip_data() eval $LOGFS local ip_tool_command=$( type -p ip ) - local temp_array='' ip_tool='ip' + local temp_array='' ip_tool='ip' ip_tool_data='' # the chances for all new systems to have ip by default are far higher than # the deprecated ifconfig. Only try for ifconfig if ip is not present in system if [[ -z $ip_tool_command ]];then @@ -4533,12 +4534,22 @@ get_networking_local_ip_data() else ip_tool_command="$ip_tool_command addr" fi - # lack of ip tool will throw an error only upon it's usage if [[ -n "$ip_tool_command" ]];then + if [[ $ip_tool == 'ifconfig' ]];then + ip_tool_data="$( ifconfig )" + # note, ip addr does not have proper record separation, so creating new lines explicitly here at start + # of each IF record item. Also getting rid of the unneeded numeric line starters, now it can be parsed + # like ifconfig more or less + elif [[ $ip_tool == 'ip' ]];then + ip_tool_data="$( eval ${ip_tool_command} | sed 's/^[0-9]\+:[[:space:]]\+/\n/' )" + fi + fi + if [[ -z $ip_tool_command ]];then + A_INTERFACES_DATA=( "Interfaces program 'ip' missing. Please check: $SCRIPT_NAME --recommends" ) + elif [[ -n "$ip_tool_data" ]];then IFS=$'\n' # $ip_tool_command A_INTERFACES_DATA=( $( - # important, because this can be 'ip addr' it MUST use eval ${...} - eval ${ip_tool_command} | gawk -v ipTool=$ip_tool ' + gawk -v ipTool=$ip_tool ' BEGIN { IGNORECASE=1 interface="" @@ -4547,31 +4558,26 @@ get_networking_local_ip_data() ifMask="" } # skip past the lo item - /^lo/ || /^[0-9]+: lo:/ { - while (getline && ( !/^$/ && !/valid(.*)lft/ ) ) { + /^lo/ { + while (getline && !/^$/ ) { # do nothing, just get past this entry item } } - /^[a-zA-Z]+[0-9]/ || /^[0-9]+: [a-zA-Z]+[0-9]+:/ { + /^[a-zA-Z]+[0-9]/ { # not clear on why inet is coming through, but this gets rid of it # as first line item. gsub(/,/, " ", $0) gsub(/^ +| +$/, "", $0) gsub(/ [ \t]+/, " ", $0) - if ( ipTool == "ifconfig" ) { - interface = $1 - } - # prep this this: 2: eth0: - else if ( ipTool == "ip" ) { - interface = $2 - sub(/:/, "", interface) - } + interface = $1 + # prep this this for ip addr: eth0: + sub(/:/, "", interface) ifIp="" ifIpV6="" ifMask="" aInterfaces[interface]++ - while (getline && ( !/^$/ && !/valid(.*)lft/ )) { + while (getline && !/^$/ ) { if ( ipTool == "ifconfig" ) { if (/inet addr:/) { ifIp = gensub( /addr:([0-9\.]+)/, "\\1", "g", $2 ) @@ -4614,16 +4620,18 @@ get_networking_local_ip_data() } j++ } - }' + }' <<< "$ip_tool_data" ) ) IFS="$ORIGINAL_IFS" else - A_INTERFACES_DATA=( "Interfaces program 'ip' missing. Please check: $SCRIPT_NAME --recommends" ) + A_INTERFACES_DATA=( "Interfaces program $ip_tool present but created no data. " ) fi temp_array=${A_INTERFACES_DATA[@]} log_function_data "A_INTERFACES_DATA: $temp_array" eval $LOGFE } +# get_networking_local_ip_data;exit + # get_networking_local_ip_data;exit get_optical_drive_data() {