UFFICIALE L'OT di Linux e altri OS

Pubblicità
@rebellion Per la forma statica non c'è problema, mentre la dinamica è rognosa. Nel senso, la variabile packages="" che leggo sopra, riporterà ogni volta un numero X e non sarà fisso, giusto?
Quindi potrebbe capitare di avere come in questo caso 6 pacchetti, ma il valore potrebbe essere compreso tra 0-nessun-pacchetto-da-aggiornare a tutti_pacchetti_AUR installati, è così?

Uscirebbe anche carino. :P
menu-bash.webp

Non so perché ne avevo caricate tre di cui una gigante. :P
 
Ultima modifica:
@« MoMy » questo lo script completo, ho commentato zenity in favore della selezione a terminale:
Codice:
#!/bin/bash
#aur_update.sh v3.1
#script di aggiornamento pacchetti installati da AUR, by rebellion
#preferibilmente da lanciare tramite terminale per visualizzare messaggi di dialogo con lo script
#a es. con: gnome-terminal --hide-menubar --title=\"AUR update\" -e \'sh -c \"sh /home/crivi/aur_update.sh\"\'
controllo_dipendenze () {
   dipendenze=$(pacman -Qi $package_name | grep "Dipenda da") ; dipendenze=${dipendenze:28} ; dipendenze=${dipendenze//  / }
   if [ "$dipendenze" != "Nessuna" ] ; then
      numero_dipendenze=$(($(grep -o " " <<<"$dipendenze" | wc -l)+1))
      for ((ii=1;ii<=$numero_dipendenze;ii++)) ; do dip=$(echo $dipendenze | awk -v xx=$ii '{print$xx}') ; dip=${dip%%>*} ; dip=${dip%%<*} ; dip=${dip%%=*} ; if pacman -Q | grep -w "$dip" 1>/dev/null ; then echo $dip"-----> installata" ; else echo $dip"-----> non installata" ; fi ; done
   else echo "NESSUNA dipendenza richiesta."
   fi
   echo ; read -s -p "premi invio per continuare..."
}
seleziona () {
   selezione=()
   row_max=$((${#aur_ok[@]}/4))
   packages="" ; for ((i=0;i<$row_max;i++)) ; do ii=$(( (i*4)+1 )) ; packages=$packages" "${aur_ok[$ii]} ; done
   clear ; echo -e "PACCHETTI DA AGGIORNARE:\n\n" ; for ((i=0;i<$row_max;i++)) ; do package=$(echo $packages | awk -v x=$(( $i+1 )) '{print$x}') ; echo "( ) $package" ; done ; echo -e "\n----------------\ncurs.su/curs.giù per scorrere - invio per (de)selezionare - q per uscire\n----------------"
   tput sc ; tput cuu $(( $row_max+4 )) ; tput cuf 1 ; riga=1
   while [ "$tasto" != "q" ] ; do
      read -s -N1
      ott1="$REPLY"
      read -s -N2 -t 0.001
      ott2="$REPLY"
      read -s -N1 -t 0.001
      ott3="$REPLY"
      tasto="$ott1$ott2$ott3"
      case "$tasto" in
         $'\x1b\x5b\x41')
            if [ "$riga" = 1 ] ; then tput cud $(( $row_max-1 )) ; riga=$row_max ; else tput cuu 1 ; riga=$(( $riga-1 )) ; fi ;;
         $'\x1b\x5b\x42')
            if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
         "
")
            if [ "${selezione[$riga]}" = "" ] ; then echo "x" ; selezione[$riga]="$riga"; else echo " " ; selezione[$riga]="" ; fi ; tput cuu 1 ; tput cuf 1 ; if [ "$riga" = $row_max ] ; then tput cuu $(( $row_max-1 )) ; riga=1 ; else tput cud 1 ; riga=$(( $riga+1 )) ; fi ;;
      esac
   done
   tput rc
   update=""
   package="" ; for i in "${selezione[@]}" ; do package=$(echo $packages | awk -v x=$i '{print$x}') ; update=$update" "$package ; done
}
updating () {
      risultato=""
      for ((i=1;i<=$numero;i++)) ; do
         clear
         echo -n "Controllo connessione internet..."
         if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
            echo "Connessione ok"
            package_name=$(echo $update | awk -v x=$i '{print$x}')
            echo "Installazione $package_name:" ; echo -n "ricerca $package_name_tar..."
            package_name_tar=$package_name".tar.gz"
            package_dir_del=$(find /home/$USER -type d -name "$package_name") ; package_dir_del=$(echo $package_dir_del | awk '{print$1}')
            [[ "$package_dir_del" != "" ]] && package_dir_del_old=$package_dir_del"_old"
            package_dir=$(find /home/$USER -type d -name "AUR") ; [[ "$package_dir" = "" ]] && package_dir=/home/$USER/AUR && mkdir /home/$USER/AUR
            package_path=$(find /home/$USER -type f -name "$package_name_tar") ; package_path=$(echo $package_path | awk '{print$1}')
            [[ "$package_path" != "" ]] && package_path_old=$package_path".old"
            echo "Fatto." ; echo -n "Ricerca versioni..."
            versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=$package_name" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null") ; [[ "$outofdate" = "" ]] && outofdate="(OutOfDate)" || outofdate=""
            versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}$outofdate
            versione_old=$(pacman -Qi $package_name | grep "Versione" | awk '{print$3}')
            echo "Fatto." ; echo -e "Versione installata: $versione_old\nVersione da installare: $versione_new"
            echo -e "\nControllo dipendenze del pacchetto $package_name:\n"
            controllo_dipendenze
            if dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --yesno "Verranno installate eventuali dipendenze mancanti se non presenti in AUR, altrimenti installale manualmente. Confermi l'aggiornamento?" 7 60 ; then clear
               [[ -d "$package_dir_del" ]] && mv $package_dir_del $package_dir_del_old
               [[ "$package_path" != "" ]] && mv $package_path $package_path_old
               echo -e "Aggiornamento "$package_name" in corso, non spengere il pc o la connessione.\nbackup "$package_dir_del"---> fatto\nbackup "$package_name_tar"---> fatto"
               if wget -P $package_dir https://aur.archlinux.org/cgit/aur.git/snapshot/$package_name_tar ; then
                  tar -xvzf $package_dir/$package_name_tar -C $package_dir
                  cd $package_dir/$package_name
                  if makepkg -s ; then
                     echo "Disinstallazione $package_name" ; sudo pacman -R $package_name
                     echo "Installazione $package_name scaricato" ; sudo pacman -U *.pkg.tar.xz
                     [[ "$package_path_old" != "" ]] && echo -n "Rimozione $package_path_old..." && rm $package_path_old && echo "Fatto."
                     [[ -d "$package_dir_del_old" ]] && echo -n "Rimozione cartella $package_dir_del_old di backup..." && sudo rm -r $package_dir_del_old && echo "Fatto." ; sleep 2
                     dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento eseguito!" 7 60 ; clear ; risultato=$risultato" "$package_name"-->installato\n"
                  else
                     echo "Rimozione cartella $package_dir_del (cartella scompattata $package_name_tar scaricato)..."
                     sudo rm -r $package_dir/$package_name
                     [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                     rm $package_dir/$package_name_tar ; [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                     dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito. Ripristinato il backup del pacchetto." 7 60 ; clear ; risultato=$risultato" "$package_name"-->non_installato_problemi_con_dipendenze_o_compilazione\n"
                  fi
               else
                  [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
                  [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
                  dialog --title "pacchetto $package_name" --backtitle "Aggiornamento AUR" --msgbox "Aggiornamento fallito, sembra che AUR non contenga il pacchetto da aggiornare. Ripristinato il backup del pacchetto." 7 60 ; clear
                  risultato=$risultato" "$package_name"-->non_installato_non_presente_in_AUR\n"
               fi
            else risultato=$risultato" "$package_name"-->non_installato_per_scelta_utente\n"
            fi
         else
            echo "Connessione assente. Ripristino ultima versione di $package_name..." ; sleep 2 ; 
            [[ -d "$package_dir_del_old" ]] && mv $package_dir_del_old $package_dir_del
            [[ "$package_path_old" != "" ]] && mv $package_path_old $package_path
            dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Connessione assente, aggiornamento fallito. $package_name ripristinato all'ultima versione." 7 60 ; clear
            risultato=$risultato" "$package_name"-->non_installato_per_assenza_connessione_internet\n"
         fi
      done
      clear ; echo "Riassunto aggiornamento:" ; echo -e "\n$risultato" ; echo ; echo "premi invio per terminare..." ; read -s -n 1
}
check=$(ps aux | grep "[p]acman -Syu") ; if [ "$check" = "" ] ; then
LIGHT_RED=='\033[0;31m' ; LIGHT_GREEN='\033[0;32m' ; LIGHT_WHITE='\033[1;37m' ; NC='\033[0m'
clear && echo -n "Controllo connessione internet..."
if ping -q -c 1 -W 1 8.8.8.8 >/dev/null || ping -q -c 1 -W 1 google.com >/dev/null ; then
   echo "Connesso a internet."
   echo -e "\nCONTROLLO PACCHETTI AGGIORNABILI, attendere..."
   aur=()
   aur_ok=()
   update=""
   AUR=$(pacman -Qqm)
   numero_AUR=$(pacman -Qqm | wc -l)
   for ((i=0;i<$numero_AUR;i++)) ; do ii=$((i+1)) ; aur[$i]=$(echo $AUR | awk -v x=$ii '{print$x}')
      versione_new=$(curl -s "https://aur.archlinux.org/rpc.php?v=5&type=info&arg=${aur[$i]}" | grep "Version") ; outofdate=$(echo $versione_new | grep "OutOfDate\":null")
      if [ "$versione_new" != "" ] ; then
         versione_new=${versione_new//,/ } ; versione_new=$(echo $versione_new | awk '{print$8}') ; versione_new=${versione_new:11} ; versione_new=${versione_new:0: -1}
         versione_old=$(pacman -Qi ${aur[$i]} | grep "Versione" | awk '{print$3}')
         if [ "$versione_new" != "$versione_old" ] ; then
            if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}" ; descr="AGGIORNABILE" ; else descrizione="${LIGHT_GREEN}AGGIORNABILE${NC}(${LIGHT_RED}OutOfDate${NC})" ; descr="AGGIORNABILE_(OutOfDate)" ; fi
            aur_ok+=(False ${aur[$i]} $versione_old $versione_new)
            aur[$i]=${aur[$i]}" --->"$descrizione
         else if [ "$outofdate" != "" ] ; then descrizione="${LIGHT_WHITE}AGGIORNATO${NC}" ; else descrizione="${LIGHT_WHITE}AGGIORNATO${NC}(${LIGHT_RED}OutOfDate${NC})" ; fi ; aur[$i]=${aur[$i]}" --->"$descrizione
         fi 
      else descrizione="${LIGHT_RED}NON PRESENTE IN AUR${NC}" ; aur[$i]=${aur[$i]}" --->"$descrizione
      fi
   done
   if [ "$aur_ok" = "" ] ; then
      dialog --title "Controllo pacchetti installati" --backtitle "Aggiornamento AUR" --msgbox "Tutti i pacchetti AUR installati sono aggiornati alla versione più recente!" 7 60
   else
      for ((i=0;i<$numero_AUR;i++)) ; do echo -e ${aur[$i]} ; done ; echo -e "\tt=aggiorna tutto | s=seleziona aggiornamenti | altro=esci" ; read -n 1 -s azione
      if [ "$azione" = "s" ] ; then
#         update=$(zenity --list --title="PACCHETTI AUR AGGIORNABILI" --text="seleziona per aggiornare" --width=1000 --height=650 --checklist --separator=" " --column="" --column="PACCHETTO" --column="VERSIONE INSTALLATA" --column="VERSIONE DA INSTALLARE" "${aur_ok[@]}" 2>/dev/null) ; numero=$(($(grep -o " " <<<"$update" | wc -l)+1))
         seleziona ; numero=$(grep -o " " <<<"$update" | wc -l)
          [[ "${update// /}" != "" ]] && updating
      elif [ "$azione" = "t" ] ; then numero=$((${#aur_ok[@]}/4))
         for ((i=0;i<$numero;i++)) ; do ii=$(( (i*4)+1 )) ; update=$update" "${aur_ok[$ii]} ; done
         updating
      fi
   fi
else
   dialog --title "Controllo connessione internet" --backtitle "Aggiornamento AUR" --msgbox "Sembra che manchi la connessione, impossibile proseguire." 7 60
fi
else dialog --title "Controllo gestione pacchetti (PACMAN)" --backtitle "Aggiornamento AUR" --msgbox "C'è già in esecuzione il gestore pacchetti, attenderne la fine." 7 60
fi
exit 0
 
@rebellion Per la forma statica non c'è problema, mentre la dinamica è rognosa. Nel senso, la variabile packages="" che leggo sopra, riporterà ogni volta un numero X e non sarà fisso, giusto?
Quindi potrebbe capitare di avere come in questo caso 6 pacchetti, ma il valore potrebbe essere compreso tra 0-nessun-pacchetto-da-aggiornare a tutti_pacchetti_AUR installati, è così?

Uscirebbe anche carino. :P
Visualizza allegato 276838

Non so perché ne avevo caricate tre di cui una gigante. :P
quando non ci sono pacchetti da aggiornare non si apre la selezione ma termina con avviso.
carino il font sulla barra del titolo del terminale, che cos'è?
 
@rebellion Che domande, MoMy-font :asd:
Si chiama URW Chancery L però non ricordo dove lo presi perché mi trascino da anni i due files e li butto dentro una cartella fonts quando reinstallo o faccio manovre strane. Da non confondere col URW Gothic. Nel pacchetto trovi il font Z003 molto molto simile.

EDIT: Quindi nello script il comando per avviare la selezione di 1-N pacchetti è "seleziona" (che sta sotto a zenity commentato).
 
@rebellion Che domande, MoMy-font :asd:
Si chiama URW Chancery L però non ricordo dove lo presi perché mi trascino da anni i due files e li butto dentro una cartella fonts quando reinstallo o faccio manovre strane. Da non confondere col URW Gothic. Nel pacchetto trovi il font Z003 molto molto simile.

EDIT: Quindi nello script il comando per avviare la selezione di 1-N pacchetti è "seleziona" (che sta sotto a zenity commentato).
installati.:figo:
 
rebellion, ma stavo pensando una cosa u.u
se per usare il tuo script di update devo scaricare a mano lo snapshot da AUR, quale sarebbe il vantaggio di usare lo script, piuttosto che fare tutto a mano? tanto si tratta di dare un tar + makepkg + pacman

te lo chiedo da "nabbo" che si trova davanti il tuo script e il post del purista contrario agli AUR helper
 
rebellion, ma stavo pensando una cosa u.u
se per usare il tuo script di update devo scaricare a mano lo snapshot da AUR, quale sarebbe il vantaggio di usare lo script, piuttosto che fare tutto a mano? tanto si tratta di dare un tar + makepkg + pacman

te lo chiedo da "nabbo" che si trova davanti il tuo script e il post del purista contrario agli AUR helper
Astinenza da bash..è una brutta bestia.. :D
Cmq non scarichi a mano è tutto automatico
 
ahahahahah astinenza da parte mia? no ma io in bash faccio schifo, più che astinenza sarebbe una mancanza proprio xD

azz quindi hai fatto un wrapper base. ebbravo!!!
astinenza mia! ho avuto la sbandata..la parentesi di python e son tornato al mio vecchio ammore!:brindiamo:
spero non mi legga mia moglie...:look::D

alla fine però se non aggiornano il numero versione quelli di aur non ci posso fare niente, a meno che non confronti il numero versione dei pacchetti in favore che ne so della data di rilascio dell'aggiornamento?:boh:
 
Zero Kill @rebellion, ho finito lo scriptino, dopo cena lo pulisco da tutti vari strafalcioni, lo testo con lista pacchetti random e lo posto. Devo ammettere che non mi è stato facilissimo perché non mi ero mai cimentato. Per risolvere la mia mancanza mi son studiato i programmini che postai l' altro dì altrimenti sarei ancora in alto mare. :|
 
astinenza mia! ho avuto la sbandata..la parentesi di python e son tornato al mio vecchio ammore!:brindiamo:
spero non mi legga mia moglie...:look::D

alla fine però se non aggiornano il numero versione quelli di aur non ci posso fare niente, a meno che non confronti il numero versione dei pacchetti in favore che ne so della data di rilascio dell'aggiornamento?:boh:

LOL

bravo, non dirle nulla perché non capirebbe ahahahah la mia lei mi guardava strano e mi bacchettava quando dicevo che mi ero innamorato di un particolare circuito o di qualcosa ahahahah

buh, bisognerebbe sentire qualche TU. magari scrivo scrivo sul gruppo telegram, anche se c'è poco da fare, nel senso che bisognerebbe solo prendere a sprangate i maintainer pigri e nabbi.
 
@rebellion Ekkilo.
Il comando (ho indicato pacman -Qi <applicazione> tanto per fargli fare qualcosa) lo trovi alla riga 128. Da me funziona, provato e riprovato... :asd:
Metto un credito a oTo (anche se non so chi sia) perché mi ha ispirato leggendo un suo lavoro.
menu-bash1.webp menu-bash2.webp menu-bash3.webp
Codice:
#/bin/bash
# Credito by oTo per avermi ispirato. :P
packages="yaourt xterm skippy-xd-git skippy-xd-git anamnesis aurvote cower fontconfig-infinality-ultimate"
pack_exit="$packages EXIT"
PACCHETTI_PKG=($packages)
SEL_PAK=${#PACCHETTI_PKG[*]}
LISTA_MENU=($pack_exit)
TOT_PACCHETTI=${#LISTA_MENU[*]}
FONDO_MENU=$((${#LISTA_MENU[*]}+4))
trap "R;exit" 2
ESCHEIP=$( echo -en "\033")
T_PUT(){ echo -en "\033[${1};${2}H";}
CoLORA(){ echo -en "\033[7m";}
DeCOLORA(){ echo -en "\033[27m";}

MENU_ALTO() {
    CoLORA
    T_PUT 1 2
    echo -e " PACCHETTI DA AGGIORNARE "
    DeCOLORA
    for each in $(seq 1 ${#LISTA_MENU[*]})
    do
        echo -e ""
    done
}

i=0
echo -en "\033c"
NULL=/dev/null

MENU_SOTTO() {
    CoLORA;T_PUT $FONDO_MENU 2
    printf " Su/Giù = Per Muoversi - Invio = Seleziona "
    DeCOLORA
}

TASTI_SUGIU() {
    read -s -n3 TASTO 2>/dev/null >&2
    if [[ $TASTO = $ESCHEIP[A ]]; then
        echo SU
    fi
    if [[ $TASTO = $ESCHEIP[B ]]; then
        echo GIU
    fi
}

POSIZIONE() {
    if [[ $cur = SU ]]; then
        ((i--))
    fi
    if [[ $cur = GIU ]]; then
        ((i++))
    fi
    if [[ i -lt 0   ]]; then
        i=$SEL_PAK
    fi
    if [[ i -gt $SEL_PAK ]];then
        i=0
    fi
}

ADD_LISTA() {
    LTIPUT=$(($1+3)); T_PUT $LTIPUT 5; echo -en ${LISTA_MENU[$1]}
}

AGG_MENU() {
    PRIMADI=$((i+1)); DOPODI=$((i-1))
    if [[ $DOPODI -lt 0 ]]; then
        DOPODI=$SEL_PAK
    fi
    if [[ $PRIMADI -gt $SEL_PAK ]]; then
        PRIMADI=0
    fi
    if [[ $j -lt $i ]]; then
        DeCOLORA
    fi
    if [[ $PRIMADI -eq 0 ]] || [[ $DOPODI -eq $SEL_PAK ]]; then
        DeCOLORA
        ADD_LISTA $DOPODI
        ADD_LISTA $PRIMADI
    fi
    j=$i
    DeCOLORA
    ADD_LISTA $DOPODI
    ADD_LISTA $PRIMADI
}

MENU() {
    for ((a=0; a <= ${#PACCHETTI_PKG[*]}; a++))
    do
    LTIPUT=$(($a+3)); T_PUT $LTIPUT 5;
    ADDLISTA[$a]=$(echo -en ${LISTA_MENU[$a]})
    echo ${ADDLISTA[$a]}
    done
}

AVVIO_M() {
    echo -en "\033c"
    MENU_ALTO
    MENU_SOTTO
    MENU
}

SCAMBIA() {
    AGG_MENU
    CoLORA
    ADD_LISTA "$S"
    cur=`TASTI_SUGIU`
}

TORNA_M() {
    CoLORA
    echo -en "\nInvio = Menu "
    $b
    read
    AVVIO_M
}; AVVIO_M

while [[ "$O" != " " ]]; do
    if [[ "$i" ]]; then
        S="$i"
        SCAMBIA
        if [[ $cur = "" ]]; then
            if [[ ${LISTA_MENU[$i]} = EXIT ]]; then
                echo -en "\033c"
                exit 0
            else
                echo -en "\033c"
                echo -en "$(pacman -Qi ${PACCHETTI_PKG[$i]})\n\n\n"
                TORNA_M
            fi
        fi
    fi
POSIZIONE
done
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top