diff --git a/scripts/getInfo b/scripts/getInfo index dbcdd8e..13a6540 100755 --- a/scripts/getInfo +++ b/scripts/getInfo @@ -1,7 +1,7 @@ #!/bin/bash -version=3.21.0 -date="21/02/2018" +version=3.22.0 +date="22/02/2018" projet="simpledeb" contact="IRC freenode.net ##sdeb ou https://framagit.org/kyodev/kyopages/issues/" script="getInfo" @@ -52,12 +52,12 @@ f__color(){ # 31/01/2018 # $1=oui|non | clear | -tx (oui|non, réponse par défaut si entrée seule), $2=message, return 0 si oui, return 1 si non # options: oui|non réponse par défaut, -txy timeout (sans espaces entre t et chiffres) 1 à 99s # clear effacement ligne question/réponse -f__dialog_oui_non(){ # 30/01/2018 +f__dialog_oui_non(){ # 22/02/2018 local param # extraction timeout éventuel if [[ "$1" =~ -t[0-9]{1,2} ]]; then - param=$( sed -En 's/.*(-t[0-9]{1,2}).*/\1/p' <<< $1 ) + param=$( sed -En 's/.*(-t[0-9]{1,2}).*/\1/p' <<< "$1" ) fi # affichage echo -en "$BLUE$2$STD" @@ -95,7 +95,7 @@ f__dialog_oui_non(){ # 30/01/2018 # si joker (*?) sur chemin, le motif d'exclusion ne s'applique pas à un répertoire listé, juste sur le nom du fichier # attention, les jokers sont interprétés à l'appel de la fonction # exemple: f__dir -l "$dir" "lock|partial" ou "\.list" -f__dir(){ # 12/12/2017 +f__dir(){ # 22/02/2017 local i=0 action="-c" stock='' [[ "$1" =~ - ]] && action="$1" || action="-c" # si option en erreur: -c @@ -106,7 +106,7 @@ f__dir(){ # 12/12/2017 ((i++)) stock+="$REPLY " fi - done <<< $( ls $2 2>/dev/null ) + done <<< "$( ls $2 2>/dev/null )" if [ "$action" == "-c" ]; then echo "$i" elif [ "$action" == "-l" ]; then @@ -131,11 +131,11 @@ f__error(){ # 18/12/2017 } # affichage en bleu, si $1=raw pas de ligne vide à la fin, si $1=log alors uniquement $2 logué, combiné: $1="log:raw" -f__info(){ # 26/12/2017 +f__info(){ # 22/02/2018 local depart=1 i [[ "$1" =~ "raw" || "$1" =~ "log" ]] && depart=2 - [[ "$1" =~ "log" ]] && f__log "$(sed -E 's/\\t//;s/\\n// ' <<< $2 | xargs )" + [[ "$1" =~ "log" ]] && f__log "$( sed -E 's/\\t//;s/\\n// ' <<< "$2" | xargs )" for (( i=$depart ; i<=$# ; i++ )); do echo -e " $BLUE${!i}$STD" done @@ -269,18 +269,18 @@ f__trim(){ } # $1=nombre à convertir en ko, affiche ko ou Mo ou Go -f__unit_human(){ # 26/01/2018 +f__unit_human(){ # 22/02/2018 echo -n "$( awk ' { if ( $1<1024 ) {unit="ko"; printf "%d%s", $1, unit; exit} if ( $1<1024*1024 && $1>=1024 ) {unit="Mo"; printf "%d%s", $1/1024, unit} else {unit="Go"; printf "%.1f%s", $1/1024/1024, unit} - }' <<< $1 )" + }' <<< "$1" )" } # user ayant initié la session graphique, assigne $fu_user # return 1 sur échec identification user, return 2 sur absence home/ # gestion variable environnement user avec: USER_INSTALL= script -f__user(){ # 25/01/2018 +f__user(){ # 22/02/2018 local user userid test root_login root_login="$(grep ':0:' /etc/passwd | cut -d':' -f1)" || root_login="root" @@ -298,21 +298,21 @@ f__user(){ # 25/01/2018 if [ "$SUDO_UID" ]; then userid="$SUDO_UID"; elif grep -qEo '[0-9]+' <<< "$XDG_RUNTIME_DIR" ; then - userid="$(grep -Eo '[0-9]+' <<< $XDG_RUNTIME_DIR | cut -d'/' -f4)" + userid=$( grep -Eo '[0-9]+' <<< "$XDG_RUNTIME_DIR" | cut -d'/' -f4 ) elif grep -qEo '[0-9]+' <<< "$XAUTHORITY" ; then - userid="$(grep -Eo '[0-9]+' <<< $XAUTHORITY | cut -d'/' -f4)" + userid=$( grep -Eo '[0-9]+' <<< "$XAUTHORITY" | cut -d'/' -f4 ) fi - [ "$userid" ] && user="$(grep $userid /etc/passwd | cut -d ":" -f 1 )" + [ "$userid" ] && user=$( grep $userid /etc/passwd | cut -d ":" -f 1 ) if [ "$user" ] && [ "$user" != "$root_login" ]; then fu_user="$user" return 0 else if [ "$SUDO_USER" ] && [ "$SUDO_USER" != "$root_login" ]; then user="$SUDO_USER"; - elif grep -qv 'root' <<< "$(who)"; then - user="$(grep -v 'root' <<< $(who) | head -n1 | cut -d ' ' -f1)"; # grep -v 'root' <<< $(who) | awk 'FNR==1{print $1}' + elif grep -qv 'root' <<< "$( who )"; then + user=$( grep -v 'root' <<< "$( who )" | head -n1 | cut -d ' ' -f1 ); # grep -v 'root' <<< "$( who )" | awk 'FNR==1{print $1}' elif grep -q 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab; then - user="$(grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | head -n1 | cut -d' ' -f2)"; # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | awk 'FNR==1{print $2} + user=$( grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | head -n1 | cut -d' ' -f2 ); # grep 'hourly.*get[A-Z].*\.anacrontab.*\.config/anacron/spool' /etc/crontab | awk 'FNR==1{print $2} fi fi fu_user="$user" @@ -325,10 +325,10 @@ f__user(){ # 25/01/2018 # $1='-w' comptage dans variable $2 des mots # $1='-wv' comptage dans variable $2, des mots $3, affiche quantité # f__wcv -l $var ; f__wcv -w $var ; f__wcv -wv $var "mot" -f__wcv(){ # 09/11/2017 +f__wcv(){ # 22/02/2018 [[ "$1" =~ -l|-wv|-w ]] || display="erreur f__wcv \$1 ($1) incorrect \n" [ "$1" == "-l" ] && echo "$2" | grep -cEv '^[[:space:]]*$' # (wc -l compterait 1 pour une variable vide) - [ "$1" == "-w" ] && echo "$(xargs <<< $2) " | grep -o " " | grep -c . # echo $(( $(grep -c .)+1 )) + [ "$1" == "-w" ] && echo "$( xargs <<< "$2" ) " | grep -o " " | grep -c . # echo $(( $(grep -c .)+1 )) [ "$1" == "-wv" ] && echo "$2" | grep -o "$3" | grep -c . } @@ -337,7 +337,7 @@ f__wcv(){ # 09/11/2017 # si $2=print affiche url testée & entêtes http & location, return 0 # si $2=loc affiche seulement location, return 0 # si $2=test return 0 si ok, return 1 si KO -f__wget_test(){ # 16/01/2018 +f__wget_test(){ # 22/02/2018 local file_test_wget="/tmp/testWget-$script" retourWget retourHttp location wget -Sq --timeout=5 --tries=2 --user-agent="$user_agent" --spider --save-headers "$1" &>"$file_test_wget" @@ -355,7 +355,7 @@ f__wget_test(){ # 16/01/2018 if [ "$2" == "test" ]; then rm -f "$file_test_wget" # spécial maintenance frama.link, pas de redirection sur page status framalink - grep -q '303' <<< $retourHttp && return 1 # 303 See Other + grep -q '303' <<< "$retourHttp" && return 1 # 303 See Other [ "$retourWget" == "0" ] && return 0 || return 1 fi if [ "$2" == "print" ]; then @@ -378,7 +378,7 @@ f__wget_test(){ # 16/01/2018 echo -e "$RED erreur wget, $retourWget \n $1 \n $YELLOW$retourHttp \n $location$STD" # pour les diags return 1 fi - if grep -q '200' <<< $retourHttp; then + if grep -q '200' <<< "$retourHttp"; then echo -e "$GREEN\ntout est ok, réessayer$STD\n" fi rm -f "$file_test_wget" @@ -629,20 +629,20 @@ f_policy(){ # 27/01/2018 # "[ \"$1\" != \"notitre\" ]" ou "[ $1 != notitre ]" (attention au manque de ") # flush (f_prnt flush) inutile si f_d(x) final # $1 type, $2 texte, [$3] test /!\ assigne la variable parent $text -f_prnt(){ # 15/12/2017 +f_prnt(){ # 22/02/2018 local preline='' line='' endline=" \n" - [[ "$1" =~ tit ]] && preline="\n\n" + [[ "$1" =~ tit ]] && preline="\n\n" [[ "$1" == 'tit1' ]] && preline+="# " [[ "$1" == 'tit2' ]] && preline+="## " [[ "$1" == 'tit3' ]] && preline+="### " - [[ "$1" =~ tit ]] && endline+="\n" - [[ "$1" == '1' ]] && line="$( sed -E 's/(.*)/* \1 /' <<<$2 )" - [[ "$1" == '2' ]] && line="$( sed -E 's/(.*)/ * \1 /' <<<$2 )" - [[ "$1" == '3' ]] && line="$( sed -E 's/(.*)/ * \1 /' <<<$2 )" - [[ "$1" == 'l1' ]] && line="$( sed -E 's/(.*)/\1/ ' <<<$2 )" - [[ "$1" == 'l2' ]] && line="$( sed -E 's/(.*)/ \1/ ' <<<$2 )" - [[ "$1" == 'l3' ]] && line="$( sed -E 's/(.*)/ \1/ ' <<<$2 )" + [[ "$1" =~ tit ]] && endline+="\n" + [[ "$1" == '1' ]] && line="$( sed -E 's/(.*)/* \1 /' <<< "$2" )" + [[ "$1" == '2' ]] && line="$( sed -E 's/(.*)/ * \1 /' <<< "$2" )" + [[ "$1" == '3' ]] && line="$( sed -E 's/(.*)/ * \1 /' <<< "$2" )" + [[ "$1" == 'l1' ]] && line="$( sed -E 's/(.*)/\1/ ' <<< "$2" )" + [[ "$1" == 'l2' ]] && line="$( sed -E 's/(.*)/ \1/ ' <<< "$2" )" + [[ "$1" == 'l3' ]] && line="$( sed -E 's/(.*)/ \1/ ' <<< "$2" )" [[ "$1" == 'quote' ]] && preline="> " [[ "$line" ]] || line="$2" # utilisation $2 sans traitement à faire @@ -746,7 +746,7 @@ f_search_ko(){ # 09/02/2018 } # [$1=silent], assigne fe_nb_audio, fe_cards_audio -fi_audio(){ # 13/02/2018 +fi_audio(){ # 22/02/2018 local cardsAudio cmd_cards version_alsa card_alsa cmd_card_alsa cmt_card_alsa pluriel text local arecord aplay local mod_alsa cmd_mod_alsa cmt_mod_alsa modAudio cmd_modAudio cmt_modAudio @@ -795,7 +795,7 @@ fi_audio(){ # 13/02/2018 # modules alsa mod_alsa=$( $c_awk '{ print $2 }' /proc/asound/modules ) - mod_alsa=$( sort <<< $mod_alsa ) + mod_alsa=$( sort <<< "$mod_alsa" ) [ "$( f__wcv -l "$mod_alsa" )" -gt 1 ] && pluriel="s" || unset pluriel cmd_mod_alsa="cat /proc/asound/modules" cmt_mod_alsa="module"$pluriel" alsa" @@ -808,7 +808,7 @@ fi_audio(){ # 13/02/2018 fi ### f_prnt tit2 "audio" - f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< $fe_cards_audio )" # en gras + f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< "$fe_cards_audio" )" # en gras f_prnt # lspci -nnv f_dspl cmd "$cardsAudio" "$cmd_cards" @@ -833,15 +833,15 @@ fi_batt(){ # 14/12/2017 } # [$1=silent], assigne $fe_nb_bluez, $fe_cards_bluez -fi_bluez(){ # 09/02/2018 +fi_bluez(){ # 22/02/2018 local bluez cmd_bluez cmt_bluez mod cmd_mod cmt_mod pluriel text x_bluez=1 if hcitool scan &>/dev/null && [[ $( f__which hciconfig ) ]]; then fe_nb_bluez=$( hciconfig name 2>/dev/null ) - fe_cards_bluez=$( grep -Eo '^hci[0-9]+' <<< $fe_nb_bluez ) - fe_nb_bluez=$( grep -c '^hci[0-9].*$' <<< $fe_nb_bluez ) + fe_cards_bluez=$( grep -Eo '^hci[0-9]+' <<< "$fe_nb_bluez" ) + fe_nb_bluez=$( grep -c '^hci[0-9].*$' <<< "$fe_nb_bluez" ) fe_cards_bluez=${fe_cards_bluez//[[:cntrl:]]/ } # mise en liste inline else fe_nb_bluez=0 @@ -899,7 +899,7 @@ fi_conf(){ # 21/02/2018 f_dspl cmd "$appArmor" "aa-status" "statut AppArmor" } -fi_cpu(){ # 15/02/2018 +fi_cpu(){ # 22/02/2018 local cpu_flags text iflag qte_flags text_flags="" pluriel local alert_microcode @@ -907,14 +907,15 @@ fi_cpu(){ # 15/02/2018 (( x_cpu_flags == 1 )) || figet_cpu_flags # appel 'base' des tags, obtention $CPU_FLAGS cpu_flags=$( sed -n 's/^flags.*: \(.*\)$/\1/p;' /proc/cpuinfo | sed -n '1p'| \ tr ' ' '\n' | sort | tr '\n' ' ' | xargs ) + for iflag in $cpu_flags; do text_flags+=$( $c_awk -v motif="$iflag" -F '⟷' ' - BEGIN { pattern = "^"toupper(motif) } # recherche sur majuscule - $0 ~ pattern { $1 = motif; exit } # $1, flag, en minuscule + BEGIN { pattern = "^"toupper(motif) } # recherche sur majuscule + $0 ~ pattern { $1 = motif; exit } # $1 (flag en minuscule) END { if( $1 != motif ) { $1 = motif; $2 = "?" } # si rien trouvé: ? printf ("%-20s %s",$1,$2 ) } - ' <<< $CPU_FLAGS )$'\n' + ' <<< "$CPU_FLAGS" )$'\n' done text_flags=${text_flags%[[:cntrl:]]} # suppression \n final [ "$cpu_flags" ] && qte_flags=$( f__wcv -w "$cpu_flags" flags ) @@ -922,7 +923,7 @@ fi_cpu(){ # 15/02/2018 alert_microcode="$fg_ucode" [ "$ENV_DEBIAN" ] && alert_microcode+="\n les installer: **apt install $ucode**" fi - [ "$(( ${fg_cpu:0:1} ))" -gt 1 ] && pluriel="s" || unset pluriel + [ $(( ${fg_cpu:0:1} )) -gt 1 ] && pluriel="s" || unset pluriel unset CPU_FLAGS x_cpu_flags ### f_prnt tit2 "processeur"$pluriel @@ -935,7 +936,7 @@ fi_cpu(){ # 15/02/2018 f_dspl sans "$text_flags" # flags cpu texte } -fi_disk(){ # 21/02/2018 +fi_disk(){ # 22/02/2018 local cmd_dd_temp="" dd_temp="" exclude_df liste_df disk_df disk_df_i cmd_dfi cmd_dfh disk_lsblk fstab local resume idResume idSwap idisk text pluriel local alert_dd_temp alert_file_resume alert_uuidResume @@ -988,28 +989,28 @@ fi_disk(){ # 21/02/2018 ### f_prnt tit2 "disque"$pluriel # espace des partitions fixes montées - f_prnt 1 "$( $c_awk -F ': ' '{print $1": **"$2"**"}' <<< $fg_disk_part_fix_tot )" + f_prnt 1 "$( $c_awk -F ': ' '{print $1": **"$2"**"}' <<< "$fg_disk_part_fix_tot" )" f_prnt f_prnt code # disques fixes et amovibles - [ "$(wc -w <<< $fg_disk_fixe)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-17s: %s' "disque$pluriel fixe$pluriel" "$fg_disk_fixe")" - [ "$(wc -w <<< $fg_disk_amov)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-17s: %s' "disque$pluriel amovible$pluriel" "$fg_disk_amov")" + [ $( wc -w <<< "$fg_disk_fixe" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-17s: %s' "disque$pluriel fixe$pluriel" "$fg_disk_fixe" )" + [ $( wc -w <<< "$fg_disk_amov" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-17s: %s' "disque$pluriel amovible$pluriel" "$fg_disk_amov" )" f_prnt # partitions fixes montées / swap / non montées - [ "$(wc -w <<< $fg_disk_part_fixe_m)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-24s: %s' "partition$pluriel fixe$pluriel montée$pluriel" "$fg_disk_part_fixe_m")" - [ "$(wc -w <<< $fg_disk_part_swap)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-24s: %s' "partition$pluriel swap$pluriel" "$fg_disk_part_swap")" - [ "$(wc -w <<< $fg_disk_part_fixe_nm)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-28s: %s' "partition$pluriel fixe$pluriel non montée$pluriel" "$fg_disk_part_fixe_nm")" + [ $( wc -w <<< "$fg_disk_part_fixe_m" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-24s: %s' "partition$pluriel fixe$pluriel montée$pluriel" "$fg_disk_part_fixe_m" )" + [ $( wc -w <<< "$fg_disk_part_swap" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-24s: %s' "partition$pluriel swap$pluriel" "$fg_disk_part_swap" )" + [ $( wc -w <<< "$fg_disk_part_fixe_nm" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-28s: %s' "partition$pluriel fixe$pluriel non montée$pluriel" "$fg_disk_part_fixe_nm" )" f_prnt # partitions amovibles montées / non montées - [ "$(wc -w <<< $fg_disk_part_amov_m)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-32s: %s' "partition$pluriel amovible$pluriel montée$pluriel" "$fg_disk_part_amov_m")" - [ "$(wc -w <<< $fg_disk_part_amov_nm)" -gt 1 ] && pluriel="s" || unset pluriel - f_prnt l "$(printf '%-32s: %s' "partition$pluriel amovible$pluriel non montée$pluriel" "$fg_disk_part_amov_nm")" + [ $( wc -w <<< "$fg_disk_part_amov_m" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-32s: %s' "partition$pluriel amovible$pluriel montée$pluriel" "$fg_disk_part_amov_m" )" + [ $( wc -w <<< "$fg_disk_part_amov_nm" ) -gt 1 ] && pluriel="s" || unset pluriel + f_prnt l "$( printf '%-32s: %s' "partition$pluriel amovible$pluriel non montée$pluriel" "$fg_disk_part_amov_nm" )" f_prnt # détails des disques par type f_prnt l "$fg_disk_table" @@ -1104,7 +1105,7 @@ fi_efi(){ # 21/02/2018 } # [$1=silent|xorgOnly], assigne $fe_gpu (liste des gpu), $fe_nb_gpu, fe_Xorg (peut être null) -fi_gpu(){ # 21/02/2018 +fi_gpu(){ # 22/02/2018 local toScrut confs ifile fileConfs cmd_confs cmt_confs info_config local cards cmd_cards prefixCmd openGl pluriel text local stck_glxinfo glx_dvc cmd_glx_dvc stck_glxinfoOpt stck_glxinfoDri glx_dvc_temp @@ -1158,7 +1159,7 @@ fi_gpu(){ # 21/02/2018 # lspci -nnk | grep -EiA 3 'vga|display|3d' # lspci -nnv | grep -iEA10 'vga|display|3d' # lspci -nnv -s $( lspci | grep -Ei 'vga|display|3d' | cut -d" " -f1 ) -# lspci -nnv -s $( awk '/VGA |Display |3D / {print $1}' <<< $( lspci ) ) +# lspci -nnv -s $( awk '/VGA |Display |3D / {print $1}' <<< "$( lspci )" ) figet_lspci "video" "raw" cards=${lspci[card]} @@ -1186,11 +1187,11 @@ fi_gpu(){ # 21/02/2018 if [ "$fe_nb_gpu" -gt 1 ]; then # plusieurs cartes, optirun et prime if [ $( f__which optirun ) ]; then stck_glxinfoOpt=$( optirun glxinfo ) - glx_dvc_temp=$( grep 'Device: ' <<< $stck_glxinfoOpt | xargs ) + glx_dvc_temp=$( grep 'Device: ' <<< "$stck_glxinfoOpt" | xargs ) cmd_glx_dvc="optirun $cmd_glx_dvc" else stck_glxinfoDri=$( DRI_PRIME=1 glxinfo ) - glx_dvc_temp=$( grep 'Device: ' <<< $stck_glxinfoDri | xargs ) + glx_dvc_temp=$( grep 'Device: ' <<< "$stck_glxinfoDri" | xargs ) cmd_glx_dvc="DRI_PRIME=1 $cmd_glx_dvc" fi [ "$glx_dvc_temp" != "$glx_dvc" ] && glx_dvc+="\n$glx_dvc_temp" # ajout si diff @@ -1215,13 +1216,13 @@ fi_gpu(){ # 21/02/2018 # xrandr: résolutionS & providers & preferred/current if [ $( f__which xrandr ) ]; then stck_xrandr_query=$( xrandr --query 2>/dev/null ) - resolutions=$( grep -i 'screen' <<< $stck_xrandr_query )$'\n' # screen partie "carte graphique" - resolutions+=$( grep -A10 -iw 'connected' <<< $stck_xrandr_query ) # partie "output" + resolutions=$( grep -i 'screen' <<< "$stck_xrandr_query" )$'\n' # screen partie "carte graphique" + resolutions+=$( grep -A10 -iw 'connected' <<< "$stck_xrandr_query" ) # partie "output" cmd_resolutions="xrandr --query | grep -A10 -B1 -i 'screen'" cmt_resolutions="10 premières résolutions possibles" providers=$( xrandr --listproviders 2>/dev/null ) # DRI: ok, sort 2 fournisseurs cmd_providers="xrandr --listproviders" - current_preferred=$( grep -EA2 'current|preferred' <<< $( xrandr --verbose 2>/dev/null ) ) + current_preferred=$( grep -EA2 'current|preferred' <<< "$( xrandr --verbose 2>/dev/null )" ) cmd_current_preferred="xrandr --verbose | grep -EA2 'current|preferred'" cmt_current_preferred="résolution courante et préférée" fi @@ -1237,11 +1238,11 @@ fi_gpu(){ # 21/02/2018 (( x_screen )) || figet_screen ### f_prnt tit2 "vidéo" - f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< $fe_gpu )" # mise en gras + f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< "$fe_gpu" )" # mise en gras f_prnt # nb écran & résolution(s) active(s) f_prnt 1 "nombre d'écrans: **$fg_nb_screen**" - [ "$( f__wcv "-wv" "$fg_resolution" "pixels" )" -gt 1 ] && pluriel="s" || unset pluriel + [ $( f__wcv "-wv" "$fg_resolution" "pixels" ) -gt 1 ] && pluriel="s" || unset pluriel f_prnt 1 "résolution"$pluriel" active"$pluriel": **$fg_resolution**" f_prnt # lspci -nnv @@ -1266,7 +1267,7 @@ fi_gpu(){ # 21/02/2018 } # $1="[opt|dri]", assigne $openGl, sous fonction de fi_gpu -fi_gpu_openGl(){ # 28/11/2017 +fi_gpu_openGl(){ # 22/02/2018 local iogl dri_glxinfo="" [[ "$1" == "opt" ]] && openGl+="\n---- \n" @@ -1279,16 +1280,16 @@ fi_gpu_openGl(){ # 28/11/2017 ) for iogl in "${toScrut[@]}" ; do if [ "$1" == "dri" ]; then - dri_glxinfo+=$( grep "$iogl" <<< $stck_glxinfoDri )$'\n' + dri_glxinfo+=$( grep "$iogl" <<< "$stck_glxinfoDri" )$'\n' elif [ "$1" == "opt" ]; then - openGl+=$( grep "$iogl" <<< $stck_glxinfoOpt )$'\n' + openGl+=$( grep "$iogl" <<< "$stck_glxinfoOpt" )$'\n' else openGl+=$( grep "$iogl" <<< "$stck_glxinfo" )$'\n' fi done if [ "$1" == "dri" ]; then dri_glxinfo=${dri_glxinfo::-1} - [ $( f__which uniq ) ] && openGl=$( uniq <<< $dri_glxinfo ) || openGl="$dri_glxinfo" + [ $( f__which uniq ) ] && openGl=$( uniq <<< "$dri_glxinfo" ) || openGl="$dri_glxinfo" fi openGl=${openGl::-1} } @@ -1317,8 +1318,8 @@ fi_ip_pub(){ # 14/12/2017 done } -fi_journal(){ # 26/01/2018 - local jctl_boot jctl_alert_k jctl_crit_k jctl_err_k jctl_warn_k jctl_warn_nok jctl_last jctl_size file +fi_journal(){ # 22/02/2018 + local file options_jctl jctl_boot jctl_alert_k jctl_crit_k jctl_err_k jctl_warn_k jctl_warn_nok jctl_last jctl_size local info_ucode text nb_lignes=25 local alert_jctl_persist alert_firmBug @@ -1328,15 +1329,18 @@ fi_journal(){ # 26/01/2018 fi file="/tmp/$script-journalctl" + if journalctl --help | grep -q -- '--no-hostname' ; then # fix obsolescence buntu 16.04 + options_jctl="--no-hostname" + fi [ "$EUID" -eq 0 ] || echo - f__sudo "LC_ALL=C journalctl --no-hostname --boot -1 &>$file-persistant ; \ - LC_ALL=C journalctl --no-pager --no-hostname -b0 -k -p 1 > $file-alert ; \ - LC_ALL=C journalctl --no-pager --no-hostname -b0 -k -p 2..2 > $file-crit ; \ - LC_ALL=C journalctl --no-pager --no-hostname -b0 -p 3..3 > $file-err ; \ - LC_ALL=C journalctl --no-pager --no-hostname -b0 -p 4..4 > $file-warn ; \ - LC_ALL=C journalctl --no-pager --no-hostname -b0 -p 4 -n$nb_lignes > $file-last ; \ + f__sudo "LC_ALL=C journalctl $options_jctl --boot -1 &>$file-persistant ; \ + LC_ALL=C journalctl --no-pager $options_jctl -b0 -k -p 1 > $file-alert ; \ + LC_ALL=C journalctl --no-pager $options_jctl -b0 -k -p 2..2 > $file-crit ; \ + LC_ALL=C journalctl --no-pager $options_jctl -b0 -p 3..3 > $file-err ; \ + LC_ALL=C journalctl --no-pager $options_jctl -b0 -p 4..4 > $file-warn ; \ + LC_ALL=C journalctl --no-pager $options_jctl -b0 -p 4 -n$nb_lignes > $file-last ; \ LC_ALL=C journalctl --disk-usage > $file-size ; \ - LC_ALL=C journalctl --no-pager --no-hostname -o short-monotonic --boot 0 -k -p6 | grep -i 'microcode: .*updated early' > $file-ucode ; \ + LC_ALL=C journalctl --no-pager $options_jctl -o short-monotonic --boot 0 -k -p6 | grep -i 'microcode: .*updated early' > $file-ucode ; \ type -p dmesg &>/dev/null && dmesg -Hk --nopager | grep -i 'Firmware Bug' > $file-firmBug ; \ chown $fu_user: $file-*" if [ "$?" != "0" ]; then @@ -1354,7 +1358,7 @@ fi_journal(){ # 26/01/2018 if grep -iq 'no persistent journal' "$file-persistant"; then alert_jctl_persist="les journaux ne sont pas persistants, revoir les logs du précédent boot " alert_jctl_persist+="n'est donc pas possible pour investigation avec: \n" - alert_jctl_persist+="$spc5 **journalctl --no-hostname --boot -1**" + alert_jctl_persist+="$spc5 **journalctl $options_jctl --boot -1**" fi # journaux kernel jctl_alert_k=$( sed '/kernel:/!d' $file-alert | sed -n 1,"$nb_lignes"p ) # emergency & alert @@ -1382,7 +1386,7 @@ fi_journal(){ # 26/01/2018 # messages microcode info_ucode=$( cat $file-ucode ) [ "$info_ucode" ] && info_ucode="microcode processeur mis à jour au boot" - alert_firmBug=$( grep -i 'Firmware Bug' <<< $jctl_err_k )$'\n' + alert_firmBug=$( grep -i 'Firmware Bug' <<< "$jctl_err_k" )$'\n' alert_firmBug=${alert_firmBug%%[[:space:]]} alert_firmBug+=$( cat $file-firmBug 2>/dev/null ) alert_firmBug=${alert_firmBug%%[[:space:]]} @@ -1395,32 +1399,32 @@ fi_journal(){ # 26/01/2018 f_prnt f_dspl_alrt "$alert_jctl_persist" "info" # journaux kernel - f_dspl cmd "$jctl_alert_k" "journalctl --no-hostname -b0 -k -p1" \ + f_dspl cmd "$jctl_alert_k" "journalctl $options_jctl -b0 -k -p1" \ "**kernel emergency 0 & alerte 1**, $nb_lignes premières lignes" - f_dspl cmd "$jctl_crit_k" "journalctl --no-hostname -b 0 -k -p 2..2" \ + f_dspl cmd "$jctl_crit_k" "journalctl $options_jctl -b 0 -k -p 2..2" \ "**kernel critique**, $nb_lignes premières lignes" - f_dspl cmd "$jctl_err_k" "journalctl --no-hostname -b0 -k -p 3..3" \ + f_dspl cmd "$jctl_err_k" "journalctl $options_jctl -b0 -k -p 3..3" \ "**kernel erreur**, $nb_lignes premières lignes)" - f_dspl cmd "$jctl_warn_k" "journalctl --no-hostname -b0 -k -p 4..4" \ + f_dspl cmd "$jctl_warn_k" "journalctl $options_jctl -b0 -k -p 4..4" \ "**kernel warning**, $nb_lignes premières lignes" # journaux hors kernel f_prnt tit2 "journalctl hors kernel (emergency, alert, erreur, warning ou critique)" f_prnt 1 "Début des log: **$jctl_boot**" f_prnt - f_dspl cmd "$jctl_alert_nok" "journalctl --no-hostname -b0 -p 1 | grep -v kernel" \ + f_dspl cmd "$jctl_alert_nok" "journalctl $options_jctl -b0 -p 1 | grep -v kernel" \ "**hors kernel, emergency 0 & alerte 1**, $nb_lignes premières lignes" - f_dspl cmd "$jctl_crit_nok" "journalctl --no-hostname -b0 -p 2..2 | grep -v kernel" \ + f_dspl cmd "$jctl_crit_nok" "journalctl $options_jctl -b0 -p 2..2 | grep -v kernel" \ "**hors kernel, critique**, $nb_lignes premières lignes" - f_dspl cmd "$jctl_err_nok" "journalctl --no-hostname -b0 -p 3..3 | grep -v kernel" \ + f_dspl cmd "$jctl_err_nok" "journalctl $options_jctl -b0 -p 3..3 | grep -v kernel" \ "**hors kernel, erreur**, $nb_lignes premières lignes" - f_dspl cmd "$jctl_warn_nok" "journalctl --no-hostname -b0 -p 4..4 | grep -v kernel" \ + f_dspl cmd "$jctl_warn_nok" "journalctl $options_jctl -b0 -p 4..4 | grep -v kernel" \ "**hors kernel, warning**, $nb_lignes premières lignes" #informations f_prnt 1 "les $nb_lignes premières lignes commencent à la date du dernier boot" f_prnt f_dspl cmd "$jctl_size" "journalctl --disk-usage " "taille des journaux" # dernières lignes - f_dspl cmd "$jctl_last" "journalctl --no-hostname -b0 -p 4 -n25" \ + f_dspl cmd "$jctl_last" "journalctl $options_jctl -b0 -p 4 -n25" \ "**toutes provenance, emergency-warning**, $nb_lignes lignes les plus **récentes**" f_dspl_alrt "$alert_firmBug" "alert" f_dspl_alrt "$info_ucode" "info" @@ -1476,7 +1480,7 @@ fi_locale(){ # 10/12/2017 } # [$1=notitre] -fi_log_xorg(){ # 18/12/2017 +fi_log_xorg(){ # 22/02/2018 local toScrut xfile xfileTest="" logXorg cmd_logXorg="" cmt_logXorg extract dateFile text nb_lignes=50 local info_logs @@ -1497,14 +1501,14 @@ fi_log_xorg(){ # 18/12/2017 for xfile in ${toScrut[@]}; do if [ -e "$xfile" ]; then dateFile=$( date -r $xfile '+%d/%m/%Y %H:%M %z' ) - extract=$( grep -Es '\(WW\)|\(EE\)|\(\?\?\)' $xfile | sed '/(WW) warning, (EE) error,/d' ) - extract="$(sed -n 1,"$nb_lignes"p <<< $extract)" + extract=$( grep -Es '\(WW\)|\(EE\)|\(\?\?\)' "$xfile" | sed '/(WW) warning, (EE) error,/d' ) + extract=$( sed -n 1,"$nb_lignes"p <<< "$extract" ) if [ "$extract" ]; then logXorg+=" $xfile, date de modification: $dateFile \n\n" logXorg+=" (WW) **warning**, (EE) **erreur**, (??) inconnu, $nb_lignes premières lignes \n" - logXorg+="$(grep -E '\(EE\)' <<< $extract) \n" - logXorg+="$(grep -E '\(WW\)' <<< $extract) \n" - logXorg+="$(grep -E '\(\?\?\)' <<< $extract) "$'\n\n' + logXorg+=$( grep -E '\(EE\)' <<< "$extract" )$'\n' + logXorg+=$( grep -E '\(WW\)' <<< "$extract" )$'\n' + logXorg+=$( grep -E '\(\?\?\)' <<< "$extract" )" "$'\n\n' cmd_logXorg+="$xfile " else logXorg+=" $xfile : "$'\n\n' @@ -1541,7 +1545,7 @@ fi_mem(){ # 21/02/2018 } # [$1=silent], assigne fe_nb_reseau, fe_cards_reseau -fi_net(){ # 08/02/2018 ( matériel ) +fi_net(){ # 22/02/2018 ( matériel ) local cards cmd_cards modEth cmd_modEth cmt_modEth modWln cmd_modWln cmt_modWln pluriel text local alert_wlx @@ -1579,14 +1583,14 @@ fi_net(){ # 08/02/2018 ( matériel ) cmt_modWln="**Wifi:** $( f__wcv -wv "$modWln" "^[[:alnum:]]" ) module"$pluriel" utilisé"$pluriel (( x_ip == 1 )) || figet_ip if grep -iq 'wlx' <<< "$fg_ifn"; then - alert_wlx="Une interface wifi est en erreur: $( grep 'wlx' <<< ${fg_ifn// /$'\n'} ) \n" + alert_wlx="Une interface wifi est en erreur: $( grep 'wlx' <<< "${fg_ifn// /$'\n'}" ) \n" alert_wlx+="l'interface n'est pas reconnue et est donc mal nommée, " alert_wlx+="éventuellement, changer le renommage: \n" alert_wlx+="https://kyodev.frama.io/kyopages/trucs/interfaces-nommage-classique/" fi ### f_prnt tit2 "réseau" - f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< $fe_cards_reseau )" # mise en gras + f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< "$fe_cards_reseau" )" # mise en gras f_prnt # lspci -nnv f_dspl cmd "$cards" "$cmd_cards" @@ -1664,7 +1668,7 @@ fi_packagers(){ # 23/11/2017 fi } -fi_pkg_apt(){ # 15/02/2018 +fi_pkg_apt(){ # 22/02/2018 local dateMaj nb_packages ifile info_update text pluriel local sources cmt_sources cmd_sources result local apt_v apt_version apt_prefs cmt_apt_prefs cmd_apt_prefs alert_non_pref @@ -1737,36 +1741,36 @@ fi_pkg_apt(){ # 15/02/2018 # divers dateMaj=$( date -r /var/cache/apt/pkgcache.bin '+%d/%m/%Y %H:%M %z' 2>/dev/null) || \ dateMaj=$( date -r /var/cache/apt '+%d/%m/%Y %H:%M %z' 2>/dev/null ) # /var/lib/dpkg/ - nb_packages=$( dpkg -l | grep -c '^ii' ) # alternatif: grep -c '\.list' <<< $(ls -1 /var/lib/dpkg/info/*.list) + nb_packages=$( dpkg -l | grep -c '^ii' ) # alternatif: grep -c '\.list' <<< "$( ls -1 /var/lib/dpkg/info/*.list )" # https apt_version=$( apt --version ) # apt 1.4.8 (i386) apt_version=${apt_version#apt } # 1.4.8 (i386) apt_version=${apt_version% (*} # 1.4.8 apt_v=${apt_version%.*} # 1.4 - alert_https=$( $c_awk '{if ( $1 > 1.5 ) {print "https inutile"}}' <<< $apt_v ) + alert_https=$( $c_awk '{if ( $1 > 1.5 ) {print "https inutile"}}' <<< "$apt_v" ) if f__requis_deb "apt-transport-https" && [ "$alert_https" ]; then alert_https="le paquet est inutile maintenant avec la version $apt_v d'apt (depuis 1.6)" else unset alert_https fi - alert_httpsPossible=$( $c_awk '{if ( $1 > 1.5 ) {print "https possible"}}' <<< $apt_v ) + alert_httpsPossible=$( $c_awk '{if ( $1 > 1.5 ) {print "https possible"}}' <<< "$apt_v" ) if [ "$alert_httpsPossible" ]; then alert_httpsPossible="votre version d'apt ($apt_v) permet d'utiliser simplement les sources avec " alert_httpsPossible+="le protocole https et les dépôts deb.debian.org" fi # httpredir - if grep -iq 'httpredir' <<< $sources ; then + if grep -iq 'httpredir' <<< "$sources" ; then alert_httpredir="ces urls sont obsolètes, préférer http://deb.debian.org/ ou un miroir local: \n\n" - alert_httpredir+="$(grep 'httpredir' <<< "$sources")" + alert_httpredir+=$( grep 'httpredir' <<< "$sources" ) fi echo -n "◇" # extraction qte ugrade, full-upgrade stck_upgd=$( LC_ALL=C apt-get upgrade --simulate 2>/dev/null ) # $1 upgraded, $6 to remove, $10 not upgraded # => qte_upgradable [0]=upgraded, [1]=notUpgraded - qte_upgradable=( $( $c_awk '/ newly installed/{print $1" "$10}' <<< $stck_upgd ) ) # tableau + qte_upgradable=( $( $c_awk '/ newly installed/{print $1" "$10}' <<< "$stck_upgd" ) ) # tableau [ "${qte_upgradable[0]}" ] || qte_upgradable=("-1" "-1") # si erreur # upgrade - [ "$(( "${qte_upgradable[0]}" ))" -gt 1 ] && pluriel="s" || unset pluriel + [ $(( ${qte_upgradable[0]} )) -gt 1 ] && pluriel="s" || unset pluriel cmt_upgrade="${qte_upgradable[0]} paquet"$pluriel" à mettre à jour" [ "${qte_upgradable[0]}" -eq 0 ] && cmt_upgrade=${cmt_upgrade/0 /aucun } cmd_upgrade="apt list --upgradable" @@ -1791,22 +1795,22 @@ fi_pkg_apt(){ # 15/02/2018 notUpgraded=${notUpgraded#*The following packages have been kept back:} # suppression début notUpgraded=$( sed '/newly/d' <<< "$notUpgraded" | sort | tr '\n' ' ' ) notUpgraded=${notUpgraded// / } # suppression espace double - [ "$(( "${qte_upgradable[1]}" ))" -gt 1 ] && pluriel="s" || unset pluriel + [ $(( ${qte_upgradable[1]} )) -gt 1 ] && pluriel="s" || unset pluriel cmt_notUpgraded="${qte_upgradable[1]} paquet"$pluriel" nécessitant une mise à jour profonde (dist-upgrade)" alert_full_upgrade="ces paquets peuvent être mis à jour avec avec: **apt dist-upgrade**" fi echo -n "◇" # autoremove toRemove=$( LC_ALL=C apt-get autoremove --simulate | grep -E 'Remv | newly installed' ) - toRemove=$( sort <<< $toRemove ) - qte_toRemove=$( $c_awk '/ newly installed/{ printf $6 }' <<< $toRemove ) + toRemove=$( sort <<< "$toRemove" ) + qte_toRemove=$( $c_awk '/ newly installed/{ printf $6 }' <<< "$toRemove" ) toRemove=$( sed '/newly/d' <<< "$toRemove" ) # suppression ligne état - [ "$(( "$qte_toRemove" ))" -gt 1 ] && pluriel="s" || unset pluriel + [ $(( $qte_toRemove )) -gt 1 ] && pluriel="s" || unset pluriel cmt_toRemove="$qte_toRemove paquet"$pluriel" inutile"$pluriel [ "$qte_toRemove" -eq 0 ] && cmt_toRemove=${cmt_toRemove/0 /aucun } cmd_toRemove="apt autoremove" if [ "$qte_toRemove" -gt 0 ]; then - toRemove=$( sed -E '/^Remv/!d; s/\[.*\]//g; s/Remv //' <<< $toRemove | tr '\n' ' ' ) + toRemove=$( sed -E '/^Remv/!d; s/\[.*\]//g; s/Remv //' <<< "$toRemove" | tr '\n' ' ' ) toRemove=${toRemove// / } alert_remove="les paquets peuvent être supprimés avec: **apt autoremove --purge** \n" alert_remove+="vérifier que la liste ne contient pas des applications devenues importantes \n" @@ -1815,14 +1819,14 @@ fi_pkg_apt(){ # 15/02/2018 fi # autoclean echo -n "◇" - autoclean=$( grep '^Del' <<< $( LC_ALL=C apt-get autoclean --simulate 2>/dev/null ) ) + autoclean=$( grep '^Del' <<< "$( LC_ALL=C apt-get autoclean --simulate 2>/dev/null )" ) qte_autoclean=$( f__wcv -l "$autoclean" ) [ "$qte_autoclean" -gt 1 ] && pluriel="s" || unset pluriel cmt_autoclean="$qte_autoclean archive"$pluriel" périmée"$pluriel [ "$qte_autoclean" -eq 0 ] && cmt_autoclean=${cmt_autoclean/0 /aucune } cmd_autoclean="apt autoclean" if [ "$qte_autoclean" -gt 0 ]; then - autoclean=$( $c_awk '{print $2}' <<< $autoclean | sort | tr '\n' ' ' ) + autoclean=$( $c_awk '{print $2}' <<< "$autoclean" | sort | tr '\n' ' ' ) alert_autoclean="ces archives de paquets, sans utilité directe dans le système, " alert_autoclean+="peuvent être supprimées avec: **apt autoclean**" fi @@ -1898,7 +1902,7 @@ fi_pkg_apt(){ # 15/02/2018 # paquets figés (hold) holded=$( apt-mark showhold ) qte_holded=$( f__wcv "-l" "$holded" ) - [ "$holded" ] && holded=$( sort <<< $holded | tr '\n' ' ' ) + [ "$holded" ] && holded=$( sort <<< "$holded" | tr '\n' ' ' ) [ "$qte_holded" -gt 1 ] && pluriel="s" || unset pluriel cmt_holded="$qte_holded paquet"$pluriel" figé"$pluriel [ "$qte_holded" -eq 0 ] && cmt_holded=${cmt_holded/0 /aucun } @@ -1914,14 +1918,14 @@ fi_pkg_apt(){ # 15/02/2018 metaPkg=$( $c_awk ' /linux-(image|headers)-([0-9]{3}|amd)/ { printf "%-3s %-30s %s ",$1, $2, $3 $1=$2=$3=$4=""; print $0 - }' <<< $( dpkg -l ) ) + }' <<< "$( dpkg -l )" ) cmd_metaPkg="dpkg -l | grep -i -E 'linux-(image|headers)-([0-9]{3}|amd)'" cmt_metaPkg="métapaquet noyau" # kernel=$( dpkg -l | grep -i -E "linux-(headers|image)-$(uname -r)" ) kernel=$( $c_awk ' /linux-(headers|image)-'$(uname -r)'/ { printf "%-3s %-30s %s ",$1, $2, $3 $1=$2=$3=$4=""; print $0 - }' <<< $( dpkg -l ) ) + }' <<< "$( dpkg -l )" ) cmd_kernel="dpkg -l | grep -i -E \"linux-(headers|image)-$(uname -r)\"" cmt_kernel="noyau" ### @@ -1961,7 +1965,7 @@ fi_pkg_apt(){ # 15/02/2018 f_dspl cmd "$kernel" "$cmd_kernel" "$cmt_kernel" } -fi_pkg_x(){ # 1/12/2017 +fi_pkg_x(){ # 22/02/2018 local nb_packages cmd_nbPackages sources cmd_sources holded cmd_holded if [[ ${1%:*} == "dnf" ]]; then # Fedora, RedHat (rpm) @@ -1989,7 +1993,7 @@ fi_pkg_x(){ # 1/12/2017 cmd_sources="grep -Ersv '^#|^$' /etc/portage/repos.conf /etc/portage/repos.conf/*" elif [[ ${1%:*} == "slackware" ]]; then # Slackware nb_packages=$( f__dir -c /var/log/packages ) - cmd_nbPackages="wc -l <<< \$(ls -1 /var/log/packages)" + cmd_nbPackages="wc -l <<< \"\$(ls -1 /var/log/packages)\"" sources=$( f_grep_file "/etc/slackpkg/mirrors" ) cmd_sources="grep -Ersv '^#|^$' /etc/slackpkg/mirrors" elif [[ ${1%:*} == "zypper" ]]; then # Suse, openSuse @@ -2004,16 +2008,16 @@ fi_pkg_x(){ # 1/12/2017 cmd_nbPackages="alps showinstalled" elif [[ ${1#*:} == "eopkg" ]]; then # Solus Linux nb_packages=$( f__dir -c /var/lib/eopkg/package ) - cmd_nbPackages="wc -l <<< \$(ls -1 /var/lib/eopkg/package)" + cmd_nbPackages="wc -l <<< \"\$(ls -1 /var/lib/eopkg/package)\"" elif [[ ${1#*:} == "Guix" ]]; then # Gnu Guix nb_packages=$( f__dir -c "/gnu/store/*/" ) - cmd_nbPackages="wc -l <<< \$(ls -1 /gnu/store/*/)" + cmd_nbPackages="wc -l <<< \"\$(ls -1 /gnu/store/*/)\"" elif [[ ${1#*:} == "lvu" ]]; then # LunarLinux nb_packages=$( lvu installed 2>/dev/null ) cmd_nbPackages="lvu installed" elif [[ ${1#*:} == "Nix" ]]; then # NixOs nb_packages=$( f__dir -c "/nix/store/*/" ) - cmd_nbPackages="wc -l <<< \$(ls -1 /nix/store/*/)" + cmd_nbPackages="wc -l <<< \"\$(ls -1 /nix/store/*/)\"" elif [[ ${1#*:} == "opkg" ]]; then # opkg fork ipkg, ipkg (abandonné) sauf sur Syno? nb_packages=$( opkg list-installed 2>/dev/null ) cmd_nbPackages="opkg list-installed" @@ -2045,7 +2049,7 @@ fi_pkg_x(){ # 1/12/2017 f_dspl var "$alert_pkg_todo" "aide souhaitée" } -fi_reseau(){ # 21/02/2018 ( configuration ) +fi_reseau(){ # 22/02/2018 ( configuration ) local ip4 gw4 ip4_p ip6 gw6 ip_a route netplan interfaces resolv iwconfig canal_wifi text pluriel local imgr netmgrinst netmgrrun ipa adr_temp slaac slaac_mac local alert_ifconfig alert_slaac @@ -2066,14 +2070,14 @@ fi_reseau(){ # 21/02/2018 ( configuration ) # ip a & route ip_a=$( ip a | sed '/link\/ether/d; /link\/loopback.*/d' ) # filtre adr MAC link (lo) ip_a=$( sed '/valid_lft forever preferred_lft forever/d; - /temporary deprecated dynamic/d; /preferred_lft 0sec/d' <<< $ip_a ) - route=$( sort <<< $( ip -4 route show ) )$'\n\n' + /temporary deprecated dynamic/d; /preferred_lft 0sec/d' <<< "$ip_a" ) + route=$( sort <<< "$( ip -4 route show )" )$'\n\n' route+=$( ip -6 route show ) # netplan (ubuntu) netplan=$( f_grep_file "etc/netplan/*.yaml" ) # interfaces & resolv interfaces=$( f_grep_file "/etc/network/interfaces*" ) - interfaces=$( sed -E 's/wpa-psk [[:graph:]]+/wpa-psk /; s/:/: /' <<< $interfaces ) + interfaces=$( sed -E 's/wpa-psk [[:graph:]]+/wpa-psk /; s/:/: /' <<< "$interfaces" ) resolv=$( f_grep_file "/etc/resolv.conf" "notitre" ) # iwconfig (/sbin) if [ $( f__which iwconfig ) ]; then #paquet wireless-tools requis @@ -2088,7 +2092,7 @@ fi_reseau(){ # 21/02/2018 ( configuration ) if [ -e "${netmgr[$imgr]}" ]; then netmgrinst+="$imgr " fi - if grep -iq "$imgr" <<< $( ps -e ) ; then + if grep -iq "$imgr" <<< "$( ps -e )" ; then netmgrrun+="$imgr " fi done @@ -2124,14 +2128,14 @@ fi_reseau(){ # 21/02/2018 ( configuration ) f_prnt tit2 "configuration" f_prnt code f_prnt l1 "ipv4" - f_prnt l2 "$ip4" + f_prnt l2 "$ip4" '[ "$ip4" ]' f_prnt [ "$(f__wcv "-l" "$gw4")" -gt 1 ] && pluriel="s" || unset pluriel f_prnt l2 "passerelle"$pluriel": ${gw4//$'\n'/ ⊗ }" '[ "$gw4" ]' f_prnt figet_ip "-6" f_prnt l1 "ipv6" - f_prnt l2 "$ip6" + f_prnt l2 "$ip6" '[ "$ip6" ]' f_prnt [ "$(f__wcv "-l" "$gw6")" -gt 1 ] && pluriel="s" || unset pluriel f_prnt l2 "passerelle"$pluriel": ${gw6//$'\n'/ ⊗ }" '[ "$gw6" ]' @@ -2148,7 +2152,7 @@ fi_reseau(){ # 21/02/2018 ( configuration ) # ipv6 dépréciées f_prnt code "" '[ "$fg_ip_deprec" ]' f_prnt l1 "ipv6 dépréciées" '[ "$fg_ip_deprec" ]' - f_prnt l2 "$fg_ip_deprec" + f_prnt l2 "$fg_ip_deprec" '[ "$fg_ip_deprec" ]' f_prnt code "" '[ "$fg_ip_deprec" ]' f_prnt # ip a & route & interface & resolv @@ -2165,7 +2169,7 @@ fi_reseau(){ # 21/02/2018 ( configuration ) f_prnt # network manager f_prnt 1 "gestionnaire de réseau" '[ "$netmgrrun" ]' - [ "$(wc -w <<< $netmgrinst)" -gt 1 ] && pluriel="s" || unset pluriel + [ $( wc -w <<< "$netmgrinst" ) -gt 1 ] && pluriel="s" || unset pluriel f_prnt 2 "installé"$pluriel": **$netmgrinst**" '[ "$netmgrinst" ]' f_prnt 2 "en fonctionnement: **$netmgrrun**" '[ "$netmgrrun" ]' f_prnt 2 "non trouvé parmi: ${!netmgr[*]}" '[ -z "$netmgrrun" ]' @@ -2222,8 +2226,8 @@ fi_ssid(){ # 24/12/2017 rm "$file_output" } -fi_system(){ # 20/02/2018 - local mbr uname bootImage initDaemon date_install lastboot uptime uptimePure loadAverage pluriel text +fi_system(){ # 22/02/2018 + local mbr uname bootImage initDaemon upstart date_install lastboot uptime uptimePure loadAverage pluriel text local enum_batt nb_desktop serverX serverType local alimentation alim_total @@ -2256,14 +2260,15 @@ fi_system(){ # 20/02/2018 bootImage=$( $c_awk '{print $1}{i=2; while (i <= NF) { print " ",$i; i++}}' /proc/cmdline ) initDaemon=$( ps -p1 -o comm --no-headers ) # ps -p1 | $c_awk 'FNR==2 {print $4}' if [[ "$initDaemon" == "systemd" && $( f__which systemd ) ]]; then - initDaemon=$( systemd --version ) - initDaemon=${initDaemon%%[[:space:]]\+*} - initDaemon=${initDaemon/systemd /systemd v} + initDaemon=$( systemd --version | head -n1 ) + fi + initDaemon=${initDaemon^} # 1er car mal + if upstart --version &>/dev/null; then # encore présent sur 16.04?? + upstart=$( upstart --version | head -n1 ) fi - initDaemon=${initDaemon^} while read -r; do date_install=$REPLY - done <<< $( ls -lt --time-style '+FORMAT %d/%m/%Y' / ) + done <<< "$( ls -dlt --time-style '+FORMAT %d/%m/%Y' /home/ /root/ /bin/ /lib* )" [[ "$date_install" =~ .*([0-9]{2}/[0-9]{2}/[0-9]{4}).* ]] && date_install=${BASH_REMATCH[1]} # lastboot="$( last -n 1 --time-format iso reboot | $c_awk 'FNR==1 {sub(/T/," ",$5);print $5}' )" # remis à jours en début de mois ?!! lastboot=$( date -r /var/run/utmp '+%d/%m/%Y %H:%M %z' ) @@ -2288,7 +2293,7 @@ fi_system(){ # 20/02/2018 } else { print groupe1,groupe2,groupe3 } - }' <<< $( LC_ALL=C uptime ) ) + }' <<< "$( LC_ALL=C uptime )" ) loadAverage=$( $c_awk -v threads="$fg_nb_threads" -F'(, )' '{ gsub(/ load average: /,"") @@ -2299,7 +2304,7 @@ fi_system(){ # 20/02/2018 print "charge système depuis les 1, 5 et 15 dernières minutes:", la1, la5, la15, " " printf "%s %s %s %s", "soit avec", threads, th, ":" printf "%d%% %d%% %d%% %s", la1/2*100, la5/2*100, la15/2*100, "d\047occupation du système (en temps)" - }' <<< $( LC_ALL=C uptime ) + }' <<< "$( LC_ALL=C uptime )" ) # nombre de bureau nb_desktop=$( xprop -root 2>/dev/null | grep '^_NET_NUMBER_OF_DESKTOPS.*=' ) @@ -2309,14 +2314,17 @@ fi_system(){ # 20/02/2018 if [ "$fe_Xorg" ]; then serverX+="$fe_Xorg" fi - serverType=" ${XDG_SESSION_TYPE^}" # retourne Wayland ou X11 + serverType=" ${XDG_SESSION_TYPE^}" # retourne Wayland ou X11 (mir?) + if ps -e | grep -q 'unity-system-co' ; then # ps -ef | grep unity-system-compositor + serverType="Mir" + fi [[ "$serverType" =~ X11 ]] && serverType+=":" [[ "$serverX" == " " && "$ENV_DISPLAY" ]] && serverX+=":no DISPLAY" [[ "$serverX" == " " && "$ENV_SSH" ]] && serverX+=":ssh" [ "$serverX" == " " ] && serverX="n/a" # alimentation - if [ $( grep -c 'AC' <<< $( f__dir -lc "/sys/class/power_supply/" ) ) -gt 0 ]; then + if [ $( grep -c 'AC' <<< "$( f__dir -lc "/sys/class/power_supply/" )" ) -gt 0 ]; then alim_total=$( grep -cs 1 /sys/class/power_supply/AC*/online ) alimentation=$( $c_awk -v "alim_total=$alim_total" ' { alim_on=sprintf("%d", $1); if (alim_on>1) pllo="s" } @@ -2326,22 +2334,22 @@ fi_system(){ # 20/02/2018 fi # batterie(s) - enum_batt=$(grep -E '[A-Z][A-Z]' <<< $fg_batt) + enum_batt=$( grep -E '[A-Z][A-Z]' <<< "$fg_batt" ) ### [ "$ORIGIN" ] && f_prnt tit2 "système" f_prnt - f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<<$fg_dmi )" # en gras + f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< "${fg_dmi}" )" # en gras f_prnt f_prnt 1 "CPU" - f_prnt 2 "**$( sed -n '1p' <<< $fg_cpu )**" + f_prnt 2 "**$( sed -n '1p' <<< "$fg_cpu" )**" f_prnt 1 "Vidéo" - f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<<$fe_gpu )" '[ "$fe_gpu" ]' + f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<< "$fe_gpu" )" '[ "$fe_gpu" ]' f_prnt 2 "pas de carte graphique détectée" '[ "$fe_nb_gpu" -eq 0 ]' f_prnt 1 "Réseau" - f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<<$fe_cards_reseau )" '[ "$fe_cards_reseau" ]' + f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<< "$fe_cards_reseau" )" '[ "$fe_cards_reseau" ]' f_prnt 2 "pas de carte réseau détectée" '[ "$fe_nb_reseau" -eq 0 ]' f_prnt 1 "Audio" - f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<<$fe_cards_audio )" '[ "$fe_cards_audio" ]' + f_prnt 2 "$( sed -E 's/(.*)/**\1**/' <<< "$fe_cards_audio" )" '[ "$fe_cards_audio" ]' f_prnt 2 "pas de carte réseau détectée" '[ "$fe_nb_audio" -eq 0 ]' f_prnt f_prnt code @@ -2351,6 +2359,7 @@ fi_system(){ # 20/02/2018 f_prnt l2 "architecture système: $fu_archi" f_prnt l2 "date d'installation: $date_install" f_prnt l2 "démon d'initialisation: $initDaemon" + f_prnt l3 "$upstart présent" '[ "$upstart" ]' f_prnt l2 "shell actif: $fg_shell" [ "$( f__wcv -w "$fg_shells" )" -gt 1 ] && pluriel="s" || unset pluriel f_prnt l2 "shell"$pluriel" installé"$pluriel": $fg_shells" @@ -2359,9 +2368,9 @@ fi_system(){ # 20/02/2018 f_prnt l1 Environnement f_prnt l2 "serveur d'affichage$serverType $serverX" f_prnt l2 "nombre d'écrans: $fg_nb_screen" - [ "$(f__wcv "-wv" "$fg_resolution" "pixels")" -gt 1 ] && pluriel="s" || unset pluriel + [ $( f__wcv "-wv" "$fg_resolution" "pixels" ) -gt 1 ] && pluriel="s" || unset pluriel f_prnt l2 "résolution"$pluriel": $fg_resolution" - [ "$(wc -w <<< $fg_dm)" -gt 1 ] && pluriel="s" || unset pluriel + [ $( wc -w <<< "$fg_dm" ) -gt 1 ] && pluriel="s" || unset pluriel f_prnt l2 "display manager"$pluriel": $fg_dm" f_prnt l2 "desktop (DE): $fg_de" f_prnt l2 "panel: $fg_de_panel" '[ "$fg_de_panel" ]' @@ -2382,7 +2391,7 @@ fi_system(){ # 20/02/2018 f_prnt l3 "$fe_touchpad" '[ "$fe_touchpad" ]' f_prnt code f_prnt - f_prnt 1 "$( sed -E 's/^(.*: )(.*)/\1**\2**/' <<<$fg_disk_part_fix_tot )" '[ "$fg_disk_part_fix_tot" ]' + f_prnt 1 "$( sed -E 's/^(.*: )(.*)/\1**\2**/' <<< "$fg_disk_part_fix_tot" )" '[ "$fg_disk_part_fix_tot" ]' f_prnt 1 "dernier boot: **$lastboot**, il y a **$uptime**" [ "$fg_nb_threads" -gt "1" ] && pluriel="s" || unset pluriel f_prnt 1 "$loadAverage" @@ -2463,7 +2472,7 @@ fi_system_analyse(){ # 26/01/2018 } # [$1=silent], assigne $fe_touchpad, fe_nb_touchpad -fi_touchpad(){ # 19/02/2018 +fi_touchpad(){ # 22/02/2018 local device cmd_device toScrut xfile file_logs type type_pt pilote cmd_pilote cmt_pilote info_driver x_touchpad=1 @@ -2475,7 +2484,7 @@ fi_touchpad(){ # 19/02/2018 REPLY=${REPLY#*Name=\"} # suppression début REPLY=${REPLY%\"} # suppression fin fe_touchpad+="$REPLY "$'\n' - done <<< $( grep -i 'Name=' <<< $device ) + done <<< "$( grep -i 'Name=' <<< "$device" )" fe_touchpad=${fe_touchpad%$'\n'} # suppression \n final cmd_device="grep -Ei -B1 -A8 'touchpad|trackpoint|synaptics|alps|etps|elan' /proc/bus/input/devices" # recherche Xorg.log @@ -2491,10 +2500,10 @@ fi_touchpad(){ # 19/02/2018 if [ "$file_logs" != "nologs" ]; then type=$( grep -is 'touchpad: buttons:' $file_logs ) # essai déterminer si multitouch - grep -iq 'left' <<< $type && type_pt="non multitouch" - grep -iq 'double' <<< $type && type_pt="2" - grep -iq 'triple' <<< $type && type_pt+="3" - grep -iq '[0-9]' <<< $type && type_pt=" multitouch $type_pt points" + grep -iq 'left' <<< "$type" && type_pt="non multitouch" + grep -iq 'double' <<< "$type" && type_pt="2" + grep -iq 'triple' <<< "$type" && type_pt+="3" + grep -iq '[0-9]' <<< "$type" && type_pt=" multitouch $type_pt points" type_pt=${type_pt/23/ 2\/3} fe_touchpad+="$type_pt" fi @@ -2504,23 +2513,22 @@ fi_touchpad(){ # 19/02/2018 if [ "$ENV_DEBIAN" ]; then pilote=$( $c_awk ' /^ii/ { printf "%-30s", $2; $1=$2=$3=$4=""; print $0 } - ' <<< $( dpkg -l | grep -E 'synaptics|libinput' ) 2>/dev/null) -# ' <<< $( dpkg -l *synaptics *libinput ) 2>/dev/null) - cmd_pilote="dpkg -l *synaptics *libinput" + ' <<< "$( dpkg -l | grep -E 'synaptics|libinput' )" ) + cmd_pilote="dpkg -l | grep -E 'synaptics|libinput'" cmt_pilote="paquets installés" info_driver="consulter d'éventuels fichiers *synaptics *libinput dans /etc/X11/xorg.conf.d/ " info_driver+="pour voir les configurations personnalisées" fi ### f_prnt tit2 "touchpad" - f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< $fe_touchpad )" # mise en gras + f_prnt 1 "$( sed -E 's/(.*)/**\1** /' <<< "$fe_touchpad" )" # mise en gras f_prnt f_dspl cmd "$device" "$cmd_device" f_dspl cmd "$pilote" "$cmd_pilote" "$cmt_pilote" f_dspl_alrt "$info_driver" "info" } -fi_usb(){ # 26/01/2018 +fi_usb(){ # 22/02/2018 local lsusb size lsusb_t ls lst ils motif result ls_p bus device id periph x_usb=1 @@ -2540,7 +2548,7 @@ fi_usb(){ # 26/01/2018 sub(/^[[:blank:]]*/,"",$0) periph=$0 printf "%03d-%03d | %s %s\n",bus,device,id,periph - } ' <<< $lsusb ) + } ' <<< "$lsusb" ) # extraction Class Driver de lsusb -t et formation index bus-device # 1-1 | root_hub ehci-pci/8p lsusb_t=$( lsusb -t ) @@ -2568,7 +2576,7 @@ fi_usb(){ # 26/01/2018 } printf( "%03d-%03d | %-14s %s\n",bus,device,class,driver ) } - ' <<< $lsusb_t ) + ' <<< "$lsusb_t" ) IFS=$'\n' # calcul largeur max $ls size=$(( 0 )) @@ -2594,7 +2602,7 @@ fi_usb(){ # 26/01/2018 f_dspl cmd "$ls_p" "lsusb + lsusb -t" "affichage modifié, ajout Class & Driver" } -fi_vrms(){ # 1/12/2017 +fi_vrms(){ # 22/02/2018 local vrms non_free contrib total text pluriel tempo [ $( f__which vrms ) ] || return 0 @@ -2609,7 +2617,7 @@ fi_vrms(){ # 1/12/2017 vrms=$( sed -E "s/Contrib packages installed on.*/$contrib paquet$pluriel contrib installé$pluriel:/ " <<< "$vrms" ) vrms=$( sed -E '/[0-9]+ non-free packages,/d; /[0-9]+ contrib packages,/d; - /^[[:space:]]*$/d' <<< $vrms ) + /^[[:space:]]*$/d' <<< "$vrms" ) elif grep -iq 'proud' <<< "$vrms" ; then tempo="Aucun paquet non libre ou contrib installé sur ce système \n\t\t **rms serait fier ☺**" vrms=$( sed -E "s/.*rms would be proud.*/$tempo/" <<< "$vrms" ) @@ -2621,7 +2629,7 @@ fi_vrms(){ # 1/12/2017 } # informations batterie(s), assigne $fg_nb_batt $fg_batt $fg_batt_serial -figet_batt(){ # 13/02/2018 +figet_batt(){ # 22/02/2018 local batt_detail batt_unit batt_capa_design batt_capa_full batt_capa_now batt_conso local batt_volt_min batt_volt_now batt_status batt_cycle alert_batt_alarm local batt_sante batt_restant tempo batRep ibat uevent @@ -2646,25 +2654,25 @@ figet_batt(){ # 13/02/2018 [ -e "$ibat/uevent" ] || continue uevent=$( grep -s . $ibat/uevent ) # extractions valeur de calcul selon type - if grep -q 'POWER_SUPPLY_CHARGE_' <<< $uevent ; then + if grep -q 'POWER_SUPPLY_CHARGE_' <<< "$uevent" ; then batt_unit="mAh" - batt_capa_design=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_FULL_DESIGN=/ {printf "%d", $2/1000}' <<< $uevent ) # mA - batt_capa_full=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_FULL=/ {printf "%d", $2/1000}' <<< $uevent ) # mA - batt_capa_now=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_NOW=/ {printf "%d", $2/1000}' <<< $uevent ) # mA - batt_conso=$( $c_awk -F '=' '/POWER_SUPPLY_CURRENT_NOW=/ {printf "%d", $2/1000}' <<< $uevent ) # mA - elif grep -q 'POWER_SUPPLY_ENERGY_' <<< $uevent ; then + batt_capa_design=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_FULL_DESIGN=/ {printf "%d", $2/1000}' <<< "$uevent" ) # mA + batt_capa_full=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_FULL=/ {printf "%d", $2/1000}' <<< "$uevent" ) # mA + batt_capa_now=$( $c_awk -F '=' '/POWER_SUPPLY_CHARGE_NOW=/ {printf "%d", $2/1000}' <<< "$uevent" ) # mA + batt_conso=$( $c_awk -F '=' '/POWER_SUPPLY_CURRENT_NOW=/ {printf "%d", $2/1000}' <<< "$uevent" ) # mA + elif grep -q 'POWER_SUPPLY_ENERGY_' <<< "$uevent" ; then batt_unit="Wh" - batt_capa_design=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_FULL_DESIGN=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # W - batt_capa_full=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_FULL=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # W - batt_capa_now=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_NOW=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # W - batt_conso=$( $c_awk -F '=' '/POWER_SUPPLY_POWER_NOW=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # W + batt_capa_design=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_FULL_DESIGN=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # W + batt_capa_full=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_FULL=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # W + batt_capa_now=$( $c_awk -F '=' '/POWER_SUPPLY_ENERGY_NOW=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # W + batt_conso=$( $c_awk -F '=' '/POWER_SUPPLY_POWER_NOW=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # W fi # extractions simples - batt_volt_min=$( $c_awk -F '=' '/POWER_SUPPLY_VOLTAGE_MIN_DESIGN=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # V - batt_volt_now=$( $c_awk -F '=' '/POWER_SUPPLY_VOLTAGE_NOW=/ {printf "%.2f", $2/1000000}' <<< $uevent ) # V - batt_status=$( $c_awk -F '=' '/POWER_SUPPLY_STATUS=/ {print $2}' <<< $uevent ) - batt_cycle=$( $c_awk -F '=' '/POWER_SUPPLY_CYCLE_COUNT=/ {print $2}' <<< $uevent ) - fg_batt_serial=$( $c_awk -F '=' '/POWER_SUPPLY_SERIAL_NUMBER=/ {sub(/^ | $|0/,"",$2); print $2}' <<< $uevent ) + batt_volt_min=$( $c_awk -F '=' '/POWER_SUPPLY_VOLTAGE_MIN_DESIGN=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # V + batt_volt_now=$( $c_awk -F '=' '/POWER_SUPPLY_VOLTAGE_NOW=/ {printf "%.2f", $2/1000000}' <<< "$uevent" ) # V + batt_status=$( $c_awk -F '=' '/POWER_SUPPLY_STATUS=/ {print $2}' <<< "$uevent" ) + batt_cycle=$( $c_awk -F '=' '/POWER_SUPPLY_CYCLE_COUNT=/ {print $2}' <<< "$uevent" ) + fg_batt_serial=$( $c_awk -F '=' '/POWER_SUPPLY_SERIAL_NUMBER=/ {sub(/^ | $|0/,"",$2); print $2}' <<< "$uevent" ) alert_batt_alarm=$( cat $ibat/alarm 2>/dev/null ) [ "$alert_batt_alarm" == "0" ] && unset alert_batt_alarm || alert_batt_alarm="$( basename $ibat ) ($alert_batt_alarm)" # calculs @@ -2678,7 +2686,7 @@ figet_batt(){ # 13/02/2018 batt_restant="en charge, reste approximativement: " tempo=$( $c_awk '$1+$2+$3 != "" && $3 != 0 {print ($1-$2)/$3}' <<< "$batt_capa_full $batt_capa_now $batt_conso" ) fi - batt_restant+=$( $c_awk '$1 != "" {printf "%d h %02d mn \n", $1, $1*60%60}' <<< $tempo )" " + batt_restant+=$( $c_awk '$1 != "" {printf "%d h %02d mn \n", $1, $1*60%60}' <<< "$tempo" )" " # mise en forme pour sortie, séparateur milliers if [ "$batt_unit" == "mAh" ]; then batt_capa_design=$( printf "%'d" $batt_capa_design ) @@ -2691,13 +2699,13 @@ figet_batt(){ # 13/02/2018 batt_detail+=${ibat#$batRep}": "$( cat $ibat/manufacturer 2>/dev/null )" " batt_detail+="("$( cat $ibat/model_name 2>/dev/null )") "$( cat $ibat/technology 2>/dev/null )", " batt_detail+="$batt_capa_design$batt_unit - $batt_volt_min""V / $batt_volt_now""V (mini/actuel)" - [ "$(xargs <<< $fg_batt_serial)" ] && fg_batt_serial="$batt_detail, n° série: $fg_batt_serial" || fg_batt_serial="n/a" + [ "$( xargs <<< "$fg_batt_serial" )" ] && fg_batt_serial="$batt_detail, n° série: $fg_batt_serial" || fg_batt_serial="n/a" [ "$batt_cycle" != "0" ] && batt_detail+=", $batt_cycle cycles "$'\n' || batt_detail+=" "$'\n' #ln 1fin # ligne 2 [ "$batt_capa_full" ] && batt_detail+="pleine charge effective: $batt_capa_full$batt_unit, " batt_detail+="pleine charge théorique: $batt_capa_design$batt_unit => " if [[ "$batt_conso" != "0" && "$batt_conso" != "0.00" ]]; then # conso éventuelle - batt_restant+="(consommation en cours: $batt_conso$(sed 's/h//' <<< $batt_unit), " + batt_restant+="(consommation en cours: $batt_conso$( sed 's/h//' <<< "$batt_unit" ), " batt_restant+="charge actuelle: $batt_capa_now$batt_unit)" fi [ "$batt_sante" ] && batt_detail+="$batt_sante% (indicateur) "$'\n' #ln 2fin @@ -2711,22 +2719,21 @@ figet_batt(){ # 13/02/2018 batt_detail+="les pleines charges et les voltages sont incohérents, batterie " batt_detail+="mal gérée ou batterie HS? "$'\n' #[ln 5] fi - if [ "$($c_awk '{printf "%d", $1}' <<< $batt_sante)" -lt 50 ] && [[ "$batt_status" == "Full" || "$batt_status" == "Unknown" ]]; then + if [ $( $c_awk '{printf "%d", $1}' <<< "$batt_sante" ) -lt 50 ] && [[ "$batt_status" == "Full" || "$batt_status" == "Unknown" ]]; then batt_detail+="batterie très mal chargée (moins de 50%): mauvais état? "$'\n' #[ln 5] fi done if [ "$batt_detail" ]; then fg_batt=${batt_detail::-1} # suppression dernier $'\n' fi - if [ -z "$(xargs <<< $fg_batt_serial)" ] ; then + if [ -z "$( xargs <<< "$fg_batt_serial" )" ] ; then fg_batt_serial+="n/a" fi } - # assigne $fg_cpu (description cpu), fg_nb_threads, $fg_cpu_arch, $fg_uarch, $fg_vendor=AMD|Intel, $fg_nb_cpu -figet_cpu(){ # 21/02/2018 + # assigne $fg_cpu (description cpu), fg_nb_threads, $fg_cpu_arch, $fg_vendor=AMD|Intel, $fg_nb_cpu +figet_cpu(){ # 22/02/2018 local cpuinfo speedNom speedMax speedMin speedCpu descrCpu cpu1 cpu2 cpu3 - x_cpu=1 fg_nb_threads=0 fg_nb_cpu=0 @@ -2797,12 +2804,12 @@ figet_cpu(){ # 21/02/2018 /bogomips/ { bogomips=sprintf("%d",$2) } END { print add ", bogomips: " bogomips ", cache: " cache }' <<< "$cpuinfo" ) - fg_cpu=$( echo -e "${cpu1// / } \n${cpu2// / } \n${cpu3// / }" ) - fg_nb_threads=$( grep -c '^processor' <<< $cpuinfo ) + fg_cpu="${cpu1// / } "$'\n'"${cpu2// / } "$'\n'${cpu3// / } + fg_nb_threads=$( grep -c '^processor' <<< "$cpuinfo" ) # arch processeur [ "$( grep -cm1 'flags.* lm ' /proc/cpuinfo )" -ge 1 ] && fg_cpu_arch="64bits" || fg_cpu_arch="32bits" # fabricant - fg_vendor=$( grep -m1 '^vendor_id' <<< $cpuinfo ) + fg_vendor=$( grep -m1 '^vendor_id' <<< "$cpuinfo" ) fg_vendor=${fg_vendor#*: } # extraction valeur vendor fg_vendor=${fg_vendor#*: } # extraction valeur vendor fg_vendor=${fg_vendor//AuthenticAMD/AMD} # allègement @@ -2811,7 +2818,7 @@ figet_cpu(){ # 21/02/2018 (( x_cpu_uarch == 1 )) || figet_cpu_uarch } - # stockage des flags cpu extraits du kernel, assigna $CPU_FLAGS + # stockage des flags cpu extraits du kernel, assigne $CPU_FLAGS figet_cpu_flags(){ # 14/12/2017 x_cpu_flags=1 @@ -3202,8 +3209,8 @@ figet_cpu_uarch(){ # 14/11/2017 } # assigne $fg_de, $fg_de_panel -figet_de(){ # 21/02/2018 # thanks neofetch - local de="n/a" ps_e +figet_de(){ # 22/02/2018 # thanks neofetch + local de="n/a" ps_e version x_de=1 fg_de="n/a" @@ -3223,9 +3230,9 @@ figet_de(){ # 21/02/2018 # thanks neofetch # fallback to using xprop elif [[ -z "$de" ]]; then de=$( xprop -root 2>/dev/null ) - de=$( $c_awk '/KDE_SESSION_VERSION|^_MUFFIN/' <<< ${de^^} ) # critère en majuscule + de=$( $c_awk '/KDE_SESSION_VERSION|^_MUFFIN/' <<< "${de^^}" ) # critère en majuscule fi - # Format strings + # Mise en forme if [[ "${de,,}" =~ kde ]]; then # test sur minuscules de="$de$KDE_SESSION_VERSION" elif [[ "${de,,}" =~ tde_full_session ]]; then @@ -3233,6 +3240,13 @@ figet_de(){ # 21/02/2018 # thanks neofetch elif [[ "${de,,}" =~ muffin || "${de,,}" =~ cinnamon ]]; then de=$( cinnamon --version ) de=${de:-cinnamon} # si nul, cinnamon + elif [[ "${de,,}" =~ unity ]]; then + de=$( unity --version ) + elif [ "${de,,}" == "xfce" ]; then + version=$( xfce4-about --version | head -n1 ) + version=${version#*(Xfce} + version=${version%)*} + de="$de$version" fi fg_de=${de,,} # minuscule fg_de=${fg_de^} # caractère 1 en majuscule @@ -3247,7 +3261,7 @@ figet_de(){ # 21/02/2018 # thanks neofetch fg_de_panel=$( $c_awk ' #inclus lxpanel, mate-panel, gnome-panel, xfce4-panel, lxqt-panel /(gnome-shell|kicker|plasma-desktop|plasma-netbook|lxpanel|panel|deepin-dock|ede|sugar|theshell|kicker)$|liri-shell/ { print $NF; exit } - ' <<< ${ps_e,,} ) + ' <<< "${ps_e,,}" ) fg_de_panel=${fg_de_panel^} } @@ -3258,7 +3272,7 @@ figet_de(){ # 21/02/2018 # thanks neofetch # $fg_disk_part_fixe_m, $fg_disk_part_amov_m : liste partitions montées, fixes ou amovibles # $fg_disk_part_swap : liste partitions swap # $fg_disk_part_fixe_nm, $fg_disk_part_amov_nm : liste partitions non montées, fixes ou amovibles -figet_disk(){ # 26/01/2018 +figet_disk(){ # 22/02/2018 local size type list_id idisk lsblk vendor model rev serial unset fg_disk_fixe fg_disk_amov @@ -3269,7 +3283,7 @@ figet_disk(){ # 26/01/2018 fg_disk_serial="$(printf '%-5s %-10s %-18s %-6s %-24s %s' "disk" "vendeur" "modèle " " rév." " n° série")"$'\n' for idisk in $(f__dir -l "/sys/block/" "loop" ); do size=$( lsblk -no SIZE -d /dev/$idisk | xargs ) #149,1G - type=$( sed -n '2p' <<< $(lsblk -no HOTPLUG /dev/$idisk) | xargs ) # 0 \n 0 \n ... + type=$( sed -n '2p' <<< "$( lsblk -no HOTPLUG /dev/$idisk )" | xargs ) # 0 \n 0 \n ... [ "$type" == "0" ] && type="Fixe" || type="Amov" vendor=$( lsblk -no VENDOR /dev/$idisk | xargs ) model=$( lsblk -no MODEL /dev/$idisk | xargs ) @@ -3277,7 +3291,7 @@ figet_disk(){ # 26/01/2018 if [[ -z "$vendor" || -z "$model" ]]; then # tentative extraction valeur via /dev/disk/by-id/ vendor="n/a" vendor=$( ls -l /dev/disk/by-id/ | $c_awk ' !/-part/ && !/wwn-/ {print $9,$11}' | xargs ) - vendor=$( sed -E 's/.*-(.*)_[0-9]+.*$/\1/;s/_/ /g' <<< $vendor ) + vendor=$( sed -E 's/.*-(.*)_[0-9]+.*$/\1/;s/_/ /g' <<< "$vendor" ) fg_disk_table+=$( printf '%-5s %-8s %-6s %s' "$idisk" "$size" "$type" "$vendor" )$'\n' fg_disk_serial+=$( printf '%-5s %s %s' "$idisk" "$vendor" "$serial" )$'\n' else @@ -3315,16 +3329,16 @@ figet_disk(){ # 26/01/2018 [ "$fg_disk_part_amov_nm" ] || fg_disk_part_amov_nm="-" # total espaces partitions fixes montées fg_disk_part_fix_tot="partitions fixes montées (total, utilisé, dispo): " - fg_disk_part_fix_tot+="$(df -h --total --output=size,used,avail $(printf '/dev/%s ' $fg_disk_part_fixe_m) 2>/dev/null | tail -n-1 | xargs)" - fg_disk_part_fix_tot="$(sed 's/G/Go/g; s/M/Mo/g; s/K/ko/g' <<< $fg_disk_part_fix_tot)" + fg_disk_part_fix_tot+=$( df -h --total --output=size,used,avail $( printf '/dev/%s ' $fg_disk_part_fixe_m ) 2>/dev/null | tail -n-1 | xargs ) + fg_disk_part_fix_tot=$( sed 's/G/Go/g; s/M/Mo/g; s/K/ko/g' <<< "$fg_disk_part_fix_tot" ) [ "$fg_disk_part_fix_tot" ] || fg_disk_part_fix_tot="n/a" # liste des disques par type list_id=$( ls -l /dev/disk/by-id/ | $c_awk '{print $9,$11}' ) - fg_disk_ata=$( sed '/^ata/!d; /part/d' <<< $list_id | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) - fg_disk_usb=$( sed -n '/part/d; /^usb/p' <<< $list_id | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) -# fg_disk_mmc=$( sed '/^mmc/!d; /part/d; /\/mmcblk/!d; s/^.*\(mmcblk..*\)$/\1/' <<< $list_id | tr '\n' ' ' ) - fg_disk_mmc=$( sed '/^mmc/!d; /part/d' <<< $list_id | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) - fg_disk_nvme=$( sed '/^nvme/!d; /part/d' <<< $list_id | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) + fg_disk_ata=$( sed '/^ata/!d; /part/d' <<< "$list_id" | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) + fg_disk_usb=$( sed -n '/part/d; /^usb/p' <<< "$list_id" | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) +# fg_disk_mmc=$( sed '/^mmc/!d; /part/d; /\/mmcblk/!d; s/^.*\(mmcblk..*\)$/\1/' <<< "$list_id" | tr '\n' ' ' ) + fg_disk_mmc=$( sed '/^mmc/!d; /part/d' <<< "$list_id" | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) + fg_disk_nvme=$( sed '/^nvme/!d; /part/d' <<< "$list_id" | $c_awk -F '/' '{print $NF}' | tr '\n' ' ' ) [ "$fg_disk_ata" ] || fg_disk_ata="-" && fg_disk_ata=$( tr ' ' '\n' <<< "$fg_disk_ata" | sort | tr '\n' ' ' ) [ "$fg_disk_usb" ] || fg_disk_usb="-" && fg_disk_usb=$( tr ' ' '\n' <<< "$fg_disk_usb" | sort | tr '\n' ' ' ) [ "$fg_disk_mmc" ] || fg_disk_mmc="-" && fg_disk_mmc=$( tr ' ' '\n' <<< "$fg_disk_mmc" | sort | tr '\n' ' ' ) @@ -3332,7 +3346,7 @@ figet_disk(){ # 26/01/2018 } # assigne $fg_distrib -figet_distrib(){ # 14/12/2017 +figet_distrib(){ # 22/02/2017 local prefix version x_distrib=1 @@ -3360,28 +3374,28 @@ figet_distrib(){ # 14/12/2017 [ "$prefix" ] && prefix=${prefix^} # 1er caractère majuscule # final if [[ "$fg_distrib" && ! "$fg_distrib" =~ $prefix ]]; then # si fg_distrib et ne contient pas prefix - fg_distrib="$prefix - $fg_distrib $(xargs <<< $version)" - elif [ -z "$fg_distrib" ] && [ "$prefix" ]; then # si fg_distrib vide et si prefix - fg_distrib="$prefix $(xargs <<< $version)" + fg_distrib="$prefix - $fg_distrib $( xargs <<< "$version" )" + elif [ -z "$fg_distrib" ] && [ "$prefix" ]; then # si fg_distrib vide et si prefix + fg_distrib="$prefix $( xargs <<< "$version" )" else - fg_distrib="$fg_distrib $( xargs <<< $version )" # utilisation fg_distrib "normal", sans préfixe (compris dans fg_distrib) + fg_distrib="$fg_distrib $( xargs <<< "$version" )" # utilisation fg_distrib "normal", sans préfixe (compris dans fg_distrib) fi fg_distrib=${fg_distrib% } # suppression espace final éventuel [ "$fg_distrib" ] || fg_distrib="${OS^} (indéterminé)" } # display manager, assigne $fg_dm (liste éventuelle) ou 'n/a' -figet_dm(){ # 21/02/2018 +figet_dm(){ # 22/02/2018 local dm_list="cdm entranced gdm3 'gdm[^-3]' qingy kdm ldm lightdm lxdm mdm nodm orthos sddm slim startx tint2 wdm xdm" local idm systemctl x11 x_dm=1 fg_dm="" for idm in $dm_list; do - if grep -iqw "$idm" <<< $(ps -e) ; then - fg_dm+="${idm^} " + if grep -iqw "$idm" <<< "$(ps -e)" ; then + fg_dm+="${idm} " elif [[ -e "/var/run/${idm}.pid" || -e "/run/${idm}.pid" || -d "/var/run/$idm/" || -d "/run/$idm/" ]]; then - fg_dm+="${idm^} " + fg_dm+="${idm} " fi done fg_dm=${fg_dm% } # supression espace final @@ -3390,16 +3404,21 @@ figet_dm(){ # 21/02/2018 fg_dm=${x11##*/} # conservation dernier champs ifs '/' fi if [ -z "$fg_dm" ] && type -p systemctl &>/dev/null; then - fg_dm=$( grep 'Main PID' <<< $( systemctl status display-manager ) ) + fg_dm=$( grep 'Main PID' <<< "$( systemctl status display-manager )" ) fg_dm=${fg_dm##* } # conservation dernier champs (ifs ' ') fg_dm=${fg_dm/\(/} # suppression ( fg_dm=${fg_dm/\)/} # suppression ) fi + # mise en forme finale + if [[ "$fg_dm" == "lightdm" ]]; then + fg_dm=$( lightdm --version 2>&1 ) + fi + fg_dm=${fg_dm^} # 1er car maj [ "$fg_dm" ] || fg_dm="n/a" } # informations DMI (firmware partie matériel), $1=[head], assigne $fg_dmi -figet_dmi(){ # 16/12/2017 +figet_dmi(){ # 22/02/2018 local product board bios tempo idmi indic1="" indic2="" local chassis_type=( # type de chassis selon smbios janvier 2017 # http://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.1.1.pdf @@ -3445,7 +3464,7 @@ figet_dmi(){ # 16/12/2017 tempo=${tempo/x.x*} # ménage tempo=${tempo/To be filled by O.E.M.} # ménage tempo=${tempo/Not Specified} # ménage - tempo=$(xargs <<< $tempo) + tempo=$( xargs <<< "$tempo" ) if [ "$idmi" == "chassis_type" ]; then tempo=" • "${chassis_type[ $(( ${tempo##0} - 1 )) ]} # valeur tableau après mise en forme index fi @@ -3456,7 +3475,7 @@ figet_dmi(){ # 16/12/2017 # ligne2 $board (carte mère) éventuellement pas affiché for idmi in board_vendor board_name board_version; do tempo=$( cat /sys/class/dmi/id/$idmi 2>/dev/null ) - tempo=$( sed 's/x.xx*//; s/To be filled by O\.E\.M\.//g' <<< $tempo | xargs ) + tempo=$( sed 's/x.xx*//; s/To be filled by O\.E\.M\.//g' <<< "$tempo" | xargs ) # indic2 pour tester égalité avec $product [[ "$idmi" == "board_vendor" || "$idmi" == "board_name" ]] && indic2+="$tempo " board+="$tempo " @@ -3464,7 +3483,7 @@ figet_dmi(){ # 16/12/2017 # ligne3 $bios for idmi in bios_vendor bios_version bios_date; do tempo=$( cat /sys/class/dmi/id/$idmi 2>/dev/null ) - tempo=$( sed 's/x.xx*//; s/To be filled by O\.E\.M\.//g' <<< $tempo | xargs ) + tempo=$( sed 's/x.xx*//; s/To be filled by O\.E\.M\.//g' <<< "$tempo" | xargs ) bios+="$tempo " done @@ -3481,7 +3500,7 @@ figet_dmi(){ # 16/12/2017 } # infos température et fan via acpi, assigne $fg_hw -figet_hw(){ # 26/01/2018 +figet_hw(){ # 22/02/2018 local name labelF inputF labelT inputT critT hystT maxiT fan temp ihw x_hw=1 @@ -3493,7 +3512,7 @@ figet_hw(){ # 26/01/2018 for ihw in /sys/class/hwmon/*; do [ -e $ihw/name ] && name=$( cat $ihw/name 2>/dev/null ) || name="indéfini" ## TEMPÉRATURE - if grep -Eq 'temp[0-9]+' <<< $( f__dir -l $ihw ) ; then # tempX dans un nom de fichier + if grep -Eq 'temp[0-9]+' <<< "$( f__dir -l $ihw )" ; then # tempX dans un nom de fichier # extraction label labelT=$( printf "%s/" "$( cat $ihw/temp*_label 2>/dev/null)" | tr ' ' '.' | tr '\n' ' ' ) # extraction températures @@ -3525,7 +3544,7 @@ figet_hw(){ # 26/01/2018 fi fi ## FAN - if grep -Eq 'fan[0-9]+' <<< $( f__dir -l $ihw ) ; then # fanX dans nom de fichiers + if grep -Eq 'fan[0-9]+' <<< "$( f__dir -l $ihw )" ; then # fanX dans nom de fichiers # extraction label labelF=$( printf "%s/" $( cat $ihw/fan*_label 2>/dev/null) ) # extraction vitesse fan, \047=' pour insérer séparateur de milliers @@ -3569,12 +3588,12 @@ figet_ip(){ # 21/02/2018 link=link"\n"sprintf("%-17s: %-22s %s",$2,$4,scope) } / lo / { lo=sprintf("%s (loopback) : %s",$2,$4) } END { printf "%s\n%s",link,lo } - ' <<< $( ip $proto -o address ) + ' <<< "$( ip $proto -o address )" ) # ipv6, traitemenent adresses dynamiques if [ "$proto" == "-6" ]; then - fg_ip_deprec=$( sed -n '/temporary deprecated dynamic/p' <<< $fg_ip ) - fg_ip=$( sed '/temporary deprecated dynamic/d; /preferred_lft 0sec/d' <<< $fg_ip ) + fg_ip_deprec=$( sed -n '/temporary deprecated dynamic/p' <<< "$fg_ip" ) + fg_ip=$( sed '/temporary deprecated dynamic/d; /preferred_lft 0sec/d' <<< "$fg_ip" ) fi # passerelles @@ -3582,11 +3601,11 @@ figet_ip(){ # 21/02/2018 awk ' BEGIN { if (proto == -6) esp=42; else esp=12 } /default via/ { printf "%-"esp"s (%s)\n",$3,$5 } - ' <<< $( ip $proto route ) + ' <<< "$( ip $proto route )" ) # interface sortante if [ "$proto" == "-6" ]; then - target=$( awk '/proto ra / { print $1; exit}' <<< $( ip $proto -o route ) ) + target=$( awk '/proto ra / { print $1; exit}' <<< "$( ip $proto -o route )" ) if [ "$target" ]; then fg_ifn_prior=$( ip $proto route get $target | sed -En 's/.*dev (.*) proto.*src ([0-9a-f:]+).*/\1 (\2)/p' ) fi @@ -3740,8 +3759,8 @@ figet_lspci(){ # 21/02/2018 unset lspci[name] while read -r field1 pci; do pci=${pci%(rev *)} - lspci[name]+="$pci "$'\n' - done <<< $( lspci | grep -Ei "$motif" ) + lspci[name]+="$pci "$'\n' + done <<< "$( lspci | grep -Ei "$motif" )" lspci[name]=$( f_lifting "${lspci[name]}" ) lspci[name]=${lspci[name]%[[:cntrl:]]} # suppression \n final lspci[nb_card]=$( grep -cEv '^[[:space:]]*$' <<< "${lspci[name]}" ) @@ -3800,14 +3819,14 @@ figet_lspci(){ # 21/02/2018 # $1=mem|swap [total|notitle|nocoltitle], assigne $fg_mem ($2=debug all cols + free) # indépendant de procps, affichage plus clair que free, mais résultats identiques -figet_mem(){ # 14/12/2017 +figet_mem(){ # 22/02/2018 local freeDebug MemTotal MemFree MemAvailable Buffers Cached SReclaimable Shmem MemUsed local SwapTotal SwapFree SwapCached col a b c MemLibre x_mem=1 [ "$2" == "debug" ] && freeDebug="$(free -hw | sed '3d')" while read -r a b c; do - [ "$a" == "MemTotal:" ] && MemTotal="$b" #echo "$a $((${b/kB}/1024))" ! partie entière ! + [ "$a" == "MemTotal:" ] && MemTotal="$b" #echo "$a $(( ${b/kB}/1024 ))" ! partie entière ! [ "$a" == "MemAvailable:" ] && MemAvailable="$b" [ "$a" == "MemFree:" ] && MemFree="$b" [ "$a" == "Buffers:" ] && Buffers="$b" @@ -3817,7 +3836,7 @@ figet_mem(){ # 14/12/2017 [ "$a" == "SwapTotal:" ] && SwapTotal="$b" [ "$a" == "SwapFree:" ] && SwapFree="$b" [ "$a" == "SwapCached:" ] && SwapCached="$b" - done <<< $(< /proc/meminfo) + done <<< "$(< /proc/meminfo)" if [ -z "$MemFree" ]; then fg_mem="debug: pas de calcul mémoire, erreur implémentation bash" return 1 @@ -3872,7 +3891,7 @@ figet_mem(){ # 14/12/2017 } # $1=bluetooth, assigne $fg_modules, $fg_mod_motif, fg_srch_mod -figet_modules(){ # 26/01/2018 +figet_modules(){ # 22/02/2018 local modules dir separator mod_ko x_modules=1 @@ -3885,7 +3904,7 @@ figet_modules(){ # 26/01/2018 modules=${modules// /|} modules=${modules%$separator} # suppression dernier séparateur modules=${modules//$separator/$'\n'} - modules=$( sort <<< $modules ) + modules=$( sort <<< "$modules" ) modules=${modules//$'\n'/$separator} modules=${modules%$separator} # suppression dernier séparateur fi @@ -3898,7 +3917,7 @@ figet_modules(){ # 26/01/2018 unset fg_mod_motif fi # extraction 1ère lignes modules chargés = module kernel - fg_srch_mod=$( $c_awk '{ print $1; exit }' <<< $fg_modules ) + fg_srch_mod=$( $c_awk '{ print $1; exit }' <<< "$fg_modules" ) # recherche emplacement modules mod_ko=$( f_search_ko "$fg_srch_mod" ) if [ "$mod_ko" ]; then @@ -3907,7 +3926,7 @@ figet_modules(){ # 26/01/2018 } # assigne $fg_nb_screen, $fg_resolution. return fg_resolution=n/a[ (ssh)] & fg_nb_screen=n/a ou valeurs -figet_screen(){ # 07/02/2018 +figet_screen(){ # 22/02/2018 x_screen=1 fg_nb_screen=0 @@ -3922,21 +3941,21 @@ figet_screen(){ # 07/02/2018 ## # résolution if [ $( f__which xrandr ) ]; then - fg_resolution=$( $c_awk '/[0-9]\*/ {gsub(/\*\+/,"",$2); printf "%s pixels (%dHz), ", $1, $2}' <<< $( xrandr --query ) ) + fg_resolution=$( $c_awk '/[0-9]\*/ {gsub(/\*\+/,"",$2); printf "%s pixels (%dHz), ", $1, $2}' <<< "$( xrandr --query )" ) fi fg_resolution=${fg_resolution%,*} # suppression ',*' final # nombre d'écran, xrandr & et xdpyinfo ne retourne pas de nombre correct (multiplex? hybrid?) - if [ -z "$(xargs <<< $fg_resolution)" ]; then + if [ -z "$( xargs <<< "$fg_resolution" )" ]; then fg_resolution="n/a" fi if [[ ! "$fg_resolution" =~ n/a ]]; then - fg_nb_screen=$( grep -o 'pixels' <<< $fg_resolution | grep -c . ) + fg_nb_screen=$( grep -o 'pixels' <<< "$fg_resolution" | grep -c . ) fi } # assigne $fg_shell, $fg_shells -figet_shell(){ # 14/12/2017 # thanks neofetch +figet_shell(){ # 22/02/2018 # thanks neofetch local shell ish x_shell=1 @@ -3969,7 +3988,7 @@ figet_shell(){ # 14/12/2017 # thanks neofetch fg_shells+=${ish##*/}" " # conservation dernier "champs", ifs '/' done fg_shells=${fg_shells% } # suppression espace de fin - fg_shells=$(tr ' ' '\n' <<< $fg_shells | sort -u | tr '\n' ' ') # tri et suppression doublons + fg_shells=$( tr ' ' '\n' <<< "$fg_shells" | sort -u | tr '\n' ' ' ) # tri et suppression doublons else fg_shells="n/a" fi @@ -4021,7 +4040,7 @@ figet_ucode(){ # 14/12/2017 } # assigne $fg_wm, contient 'n/a' ou égal 'non trouvé' ou WM -figet_wm(){ # 21/02/2018 base départ neofetch +figet_wm(){ # 22/02/2018 base départ neofetch local id xprop_id wm xprop_root ps_e version compositor x_wm=1 @@ -4043,7 +4062,6 @@ figet_wm(){ # 21/02/2018 base départ neofetch wm=${xprop_id/*_net_wm_name = } # suppression jusqu'à 'name = ' wm=${wm/\"} # suppression premier " wm=${wm/\"*} # suppression 2e " avec éventuels caractères suivants - wm=${wm,,} # tout en minuscule if [ -z "$wm" ]; then xprop_root=$( xprop -root 2>/dev/null ) @@ -4065,6 +4083,7 @@ figet_wm(){ # 21/02/2018 base départ neofetch elif [[ -z ${ps_e/*afterstep*/} ]]; then wm='afterstep' elif [[ -z ${ps_e/*awesome*/} ]]; then wm='awesome' elif [[ -z ${ps_e/*cinnamon*/} ]]; then wm='cinnamon' + elif [[ -z ${ps_e/*compiz*/} ]]; then wm='compiz' elif [[ -z ${ps_e/*fvwm*/} ]]; then wm='fvwm' elif [[ -z ${ps_e/*fvwm-crystal*/} ]]; then wm='fvwm-Crystal' elif [[ -z ${ps_e/*pekwm*/} ]]; then wm='pekwm' @@ -4087,11 +4106,17 @@ figet_wm(){ # 21/02/2018 base départ neofetch elif grep -q "/twm" <<< "$ps_e"; then wm='twm' fi fi - if [ "${wm,,}" == 'gnome shell' ]; then - version=$( gnome-shell --version ) + if [ "${wm,,}" == "gnome shell" ]; then + version=$( gnome-shell --version ) version=${version/GNOME Shell} wm="$wm$version" + elif [ "${wm,,}" == "xfwm4" ]; then + version=$( xfwm4 --version | head -n1 ) + version=${version#*version} + version=${version%)*}")" + wm="$wm$version" fi + ## Compositor if [[ "$xprop_id" =~ marco_version ]]; then # mate, ok compositor=${xprop_id/*_marco_version = } # suppression jusqu'à ... @@ -4123,11 +4148,11 @@ figet_wm(){ # 21/02/2018 base départ neofetch if [ -z "$compositor" ]; then # en aveugle, pour test et adaptations futures - [[ "$xprop_id" =~ compiz ]] && compositor+='compiz' + [[ "$xprop_id" =~ compiz ]] && compositor='compiz' [[ "$xprop_id" =~ compton ]] && compositor+='compton' [[ "$xprop_id" =~ dwc ]] && compositor+='dwc' [[ "$xprop_id" =~ fireplace ]] && compositor+='fireplace' - [[ "$xprop_id" =~ gnome-shell ]] && compositor+='gnome-shell' + [[ "$xprop_id" =~ gnome-shell ]] && compositor='gnome-shell' [[ "$xprop_id" =~ grefson ]] && compositor+='grefson' [[ "$xprop_id" =~ kmscon ]] && compositor+='kmscon' [[ "$xprop_id" =~ moblin ]] && compositor+='moblin' @@ -4139,10 +4164,22 @@ figet_wm(){ # 21/02/2018 base départ neofetch [[ "$xprop_id" =~ weston ]] && compositor+='weston' fi - [ "${compositor^}" == "${wm^}" ] && unset compositor + [ "${compositor,,}" == "${wm,,}" ] && unset wm + + # mise en forme finale + if [ "$compositor" == "compiz" ]; then + compositor=$( compiz --version ) + fi + wm=${wm^} # 1er caractère en majuscule - compositor=${compositor^} # 1er caractère en majuscule - fg_wm="$wm ($compositor)" + compositor=${compositor^} # 1er caractère en majuscule + if [[ "$wm" && "$compositor" ]]; then + fg_wm="$wm ($compositor)" + elif [[ "$wm" ]]; then + fg_wm="$wm" + elif [[ "$compositor" ]]; then + fg_wm="$compositor" + fi if [ -z "${fg_wm^}" ]; then fg_wm="non trouvé" @@ -4169,18 +4206,18 @@ fipaste(){ # 20/02/2018 } # $1=fichier à exporter, $2 durée de conservation en jour; $3 debug -fipaste_curl_pastery(){ # 11/02/2018 +fipaste_curl_pastery(){ # 22/02/2018 [ -e "$1" ] || f__error "fichier $1 inexistant" local curl id pluriel # curl -X POST "https://www.pastery.net/api/paste/?title=getInfo&language=markdown" -F file=@$1 # un fichier simple curl https://www.pastery.net/api/paste/ -F file=@data.txt - curl=$( curl --silent -X POST "https://www.pastery.net/api/paste/?title=getInfo_$version&language=markdown&duration=$(($2*1440))" --data-binary @$1 ) + curl=$( curl --silent -X POST "https://www.pastery.net/api/paste/?title=getInfo_$version&language=markdown&duration=$(( $2*1440 ))" --data-binary @$1 ) if grep -q '"result": "error' <<< "$curl" ;then f__info "$RED""Erreur critique export rapport:" f__info "$curl" else id=$( echo $curl | cut -d '"' -f 4 ) - [ "$(( "$pasteDuration" ))" -gt 1 ] && pluriel="s" || unset pluriel + [ $(( $pasteDuration )) -gt 1 ] && pluriel="s" || unset pluriel f__info "votre paste:$GREEN https://www.pastery.net/$id/" \ "(valide pendant $RED$pasteDuration jour"$pluriel")" echo -e "exporté sur https://www.pastery.net/$id/ \n\n" >> "$file_output" @@ -4346,7 +4383,7 @@ fscript_update(){ # 26/01/2018 rm -rf "$dirTemp/" } -prg_init(){ # 20/02/2018 +prg_init(){ # 22/02/2018 PATH='/usr/sbin:/usr/bin:/sbin:/bin' TERM=xterm @@ -4382,7 +4419,7 @@ prg_init(){ # 20/02/2018 [ "$OS" != "linux" ] && f__error "Linux requis" # recherche wayland - grep -iq 'wayland' <<< $( ps -e ) && wayland="wayland" + grep -iq 'wayland' <<< "$( ps -e )" && wayland="wayland" [ "$WAYLAND_DISPLAY" ] && wayland="wayland" # test SSH @@ -4468,6 +4505,7 @@ prg_3(){ # fin de traitements echo -e "--- \n" >> "$file_output" echo -e "$ligneRapport \n" >> "$file_output" if [ "$debugScript" == "ok" ]; then + echo -e "\n ***** fin script ***** \n" 1>&2 exec 2>&4 # restauration exec 4>&- # fermeture FD4 fi @@ -4476,7 +4514,7 @@ prg_3(){ # fin de traitements "vous pouvez le visualiser ultérieurement avec $GREEN$script -l" \ "vous pourrez aussi l'exporter avec $BLUE$script -p" } -prg_menu(){ # 12/12/2017 +prg_menu(){ # 22/02/2018 function display_menu { local centre=50 left=2 larg=60 @@ -4503,7 +4541,7 @@ function display_menu { echo -en "\n choix des catégories à générer (all pour toutes)? " read -r [ "$REPLY" ] && REPLY="-c${REPLY,,}" || REPLY="all" - REPLY=$( sed 's/-call/all/' <<< $REPLY ) + REPLY=$( sed 's/-call/all/' <<< "$REPLY" ) exec $0 "$REPLY" } @@ -4533,21 +4571,22 @@ declare -A lspci # sortie figet_lspci options=$@ -for j in $options; do # première passe options +for j in $options; do # première passe options case $j in - --debug-paste ) + --debug-paste ) # si debug, retour json de pastery.net optDebug="debugPaste" - ;; # si debug, retour json de pastery.net - --debug ) + ;; + --debug ) # enregistrement stderr dans $script.log debugScript="ok" rm -f "$debug_output" exec 4>&2 # sauvegarde exec 2> "$debug_output" # redirection - ;; # enregistrement stderr dans $script.log - -t* ) - pasteDuration="$(sed -En 's/-t([0-9]+)/\1/p' <<< $j)" - ;; # durée de conservation standard du paste en jours - -i | --install | -r | --remove ) + echo -e "$ligneRapport \n" 1>&2 + ;; + -t* ) # durée de conservation standard du paste en jours + pasteDuration=$(( $( sed -En 's/-t([0-9]+)/\1/p' <<< "$j" ) )) + ;; + -i | --install | -r | --remove ) # root requis si install ou remove script if [ "$EUID" -ne 0 ]; then f__info "vous devez être$RED ROOT$BLUE pour cette opération" f__sudo "exec $0 $@" @@ -4556,14 +4595,14 @@ for j in $options; do # première passe options ;;& esac done -options="$(sed -E 's/--debug-paste//g; s/-t[0-9]+//g; s/--debug//g' <<< $options | xargs)" # nettoyage options +options=$( sed -E 's/--debug-paste//g; s/-t[0-9]+//g; s/--debug//g' <<< "$options" | xargs ) # nettoyage options [ "$options" ] || options="all" for k in $options; do # traitement options menu catégories - categorie+="$(sed -En 's/-c([a-z]+)/\1/p' <<< $k)" - options="$(sed -E 's/-c[a-z]+//' <<< $k | xargs)" + categorie+=$( sed -En 's/-c([a-z]+)/\1/p' <<< "$k" ) + options=$( sed -E 's/-c[a-z]+//' <<< "$k" | xargs ) done [ "$categorie" ] && options+=" -c$categorie" @@ -4585,7 +4624,7 @@ for j in $options; do # deuxième passe options, actions -c* | all ) [ "$j" == "-c" ] && exec $0 "menu" prg_1 "$*" - j=$(sed -E 's/-c//' <<< $j) + j=$( sed -E 's/-c//' <<< "$j" ) prg_2 "$j" prg_3 ;; # rapport complet ou par catégorie diff --git a/scripts/getInfo_changelog.md b/scripts/getInfo_changelog.md index 6703ddc..2187be2 100644 --- a/scripts/getInfo_changelog.md +++ b/scripts/getInfo_changelog.md @@ -1,6 +1,17 @@ # changelog getInfo +## getInfo 3.22.0 22/02/2018 + +* plus: version lightdm, xfwm,, xfce +* plus: adaptation ubuntu, upstart, unity version, compiz version, mir +* plus: datage report debug +* fix: date installation +* fix: général, ubuntu 16.04, complètement OUT, presque aussi cata que voidLinux. version bash? et laxisme protection variable avec guillemets double. 1ère passe: grep <<< "$var" +* fix: général, ubuntu 16.04, 2e passe: <<<.*[^\"]\$.*\) (centaine environ) +* fix: général, ubuntu 16.04, 3e passe: "$(( "${ +* fix: fi_journal, obsolescence systemd buntu 16.04 + ## getInfo 3.21.0 21/02/2018 * test complet avec ubuntu 17.10: ok @@ -16,7 +27,7 @@ ## getInfo 3.20.0 20/02/2018 -* nouveau: option --debug log erreur de script, exporté avec rapport principal +* nouveau: option --debug log erreurs de script, exporté avec rapport principal * révision: figet_wm * révision: figet_cpu, affichage virtualbox * fix: fi_system, affichage touchpad=0, méthode extraction init