Siirrä sudo eri kohtaan:
#!/bin/bash
if [ "$(whoami)" != "root" ]
then
sudo $0
return
fi
set -e
apt-get update
apt-get upgrade
apt-get dist-upgrade
Lisäksi, jos haluat että koodin voi ajaa sekä komentoriviltä että sille tehdyn käynnistimen kautta, ja jos käynnistimen määritys (.desktop-tiedosto) sisältää asetuksen Terminal=true, eli suoritusta varten avataan pääteikkuna jossa näet miten suorituksen kävi, niin silloin koodiin tarvitaan yksi rivi lisää:
#!/bin/bash
if [ "$(whoami)" != "root" ]
then
sudo $0
[ $SHLVL -eq 1 ] && { printf "sulje> " ; read any; }
return
fi
set -e
apt-get update
apt-get upgrade
apt-get dist-upgrade
Komentoriviltä suoritettuna siis pysäytystä (read any) ei tehdä, koska se tarvitaan vain jos käynnistys tehtiin käynnistimen kautta.
Tuo koodi kelpaisi kyllä myöskin dash:lle, mutta silloin testattava $SHLVL-arvo on 0.