Obecnie pracuję nad skryptem bash, który instaluje i konfiguruje różne programy w standardowym systemie Linux (obecnie Ubuntu). Ponieważ instaluje programy i kopiuje pewną liczbę plików do różnych folderów wymagających podwyższonych uprawnień, już wykonałem standardowe „Potrzebuję podwyższonych uprawnień” - i wychodzę.
Chciałbym jednak, jeśli to możliwe, móc pytać użytkownika o hasło sudo i automatycznie zwiększać uprawnienia skryptu, jeśli użytkownik nie uruchomi polecenia skryptowego za pomocą sudo (np. Uruchamiając go z menedżera plików GUI), bez konieczności ponownego uruchamiania skryptu przez użytkownika.
Ponieważ jest on zaprojektowany do uruchamiania na standardowych instalacjach Linuksa, każda opcja modyfikująca system nie będzie działać dla moich celów. Wszystkie opcje muszą być zawarte w samym skrypcie.
Czy jest to możliwe w Bash? Jeśli tak, jaki jest najlepszy (bezpieczny, ale zwięzły) sposób na zrobienie tego?
Odpowiedzi:
Uruchamiam
sudo
bezpośrednio ze skryptu:źródło
Sugeruję:
źródło
if [[ -t 1 ]];
sprawdza?Dodaj to jako pierwszy wiersz skryptu:
Zmień
sudo
nagksu
lubgksudo
jeśli wolisz graficzny monit.źródło
"$*"
połączy wszystkie argumenty w jeden (/path/to/script one two three
spowoduje$1
powstanieone two three
), a$*
bez cudzysłowów zepsuje spacje w argumentach."$@"
działa dobrzesudo
, jest znacznie lepsza niż używaniesu
. Ale jeśli naprawdę tego chcesz, prawdopodobnieexec su -c "$0" "$@"
przykładowy skrypt nie mam nic przeciwko udostępnianiu ::
--ImP.TeK
źródło
[ "$UID" -eq 0 ] || exec sudo "$0" "$@"
- Wygląda jak naprawdę wydajny jeden liniowiec! Miły!$EUDI
, czy zawsze ten sam wynik? Np.[[ "$EUID" -eq 0 ]] || exec sudo "$0" "$@"