I coś nie działa:/ Dlatego zastanawiam się jak w bashu przypisuje się wynik działania jakiegoś polecenia do funkcji i jak potem ifa do tego sklepać? Próbowałem już na wiele sposobów i cały czas wyskakują jakieś errory
Zapomniałeś zacytować odpowiednio polecenie, dlatego się ono nie wykona i nie uzyskasz wyniku. Tak poza tym to skąd wziąłeś w ogóle opcję full-upgrade, bo aż z ciekawości zajrzałem do manuala aptitude i nie widzę tam takiej opcji, nie chodzi Ci przypadkiem o dist-upgrade, które wykonuje właśnie pełną aktualizację? Moim zdaniem ten skrypt jest pozbawiony w ogóle sensu, szczególnie te linie:
Bo warunek, który utworzyłeś robi dokładnie to samo zwłaszcza, gdy tworzysz i tak plik z logiem, do którego i tak musisz zaglądać. Lepszym rozwiązaniem by było stworzyć coś w ten sposób:
#!/bin/bash
if jesli_sa_aktualizacje; then
echo `polecenie` > log
fi
if [-e log];then
xterm -e nano log
fi
Nie wiem dokładnie czy chcesz uzyskać tylko i wyłącznie log czy jeśli pojawią się aktualizacje to chcesz je od razu instalować. W wolnej chwili na szybko sklepałem takie coś:
#!/bin/bash
# Logi możesz zapisać, np. w katalogu domowym w podkatalogu logi.
logs=$HOME/logi
# Sprawdzas dostępność aktualizacji.
status=`aptitude full-upgrade -s | awk '{if (NR==6) {print $1}}'`
# Sprawdzasz warunek na zasadzie sprzeczności. Zmienna status sprawdza ile pakietów zostanie zainstalowanych po wydaniu polecenia aktualizacji, jeśli liczbą będzie różna od zero to zostanie zapisane wszystko w logu, w przeciwnym wypadku skrypt zakończy działanie.
if [$status != 0]; then
echo `aptitude full-upgrade -s` > $logs/log
fi
# Jeśli pojawi się log poniższa instrukcja warunkowa nakazuje wyświetlenie zawartości logu w edytorze tekstu Nano w terminalu Xterm, w tym miejscu możesz wstawić inne polecenie, np. polecenie aktualizacji, zamiast wyświetlania logu. Wyglądałoby to tak: xterm -e aptitude full-upgrade. Log po zamknięciu terminala z edytorem Nano zostanie usunięty.
if [-e $logs/log]; then
xterm -e nano $logs/log
rm $logs/log
fi
W skrócie i bez komentarzy wygląda to tak:
#!/bin/bash
logs=$HOME/logi
status=`aptitude full-upgrade -s | awk '{if (NR==6) {print $1}}'`
if [$status != 0]; then
echo `aptitude full-upgrade -s` > $logs/log
fi
if [-e $logs/log]; then
xterm -e nano $logs/log
rm $logs/log
fi
Mój skrypt działa, czemu z niego nie skorzystasz? Dostosuj go sobie do własnych potrzeb. Jeśli chcesz mieć tylko log z informacjami o pakietach, czyli jeśli interesują Ciebie tylko te linie: 0 pakietów aktualizowanych, 0 instalowanych, 0 do usunięcia i 0 nie aktualizowanych.
To możesz to zrobić w ten sposób:
#!/bin/bash
FILE=/var/log/upgrades.log
STATUS=`aptitude full-upgrade -s | awk '{if (NR==6) {print $1}}'`
if [$STATUS != 0]; then
echo $STATUS > $FILE
else
echo "NOTHING" > $FILE
fi