Chcę napisać skrypt powłoki, aby zautomatyzować serię poleceń. Problem polega na tym, że niektóre polecenia MUSZĄ być uruchamiane jako superużytkownik, a niektóre polecenia NIE MOGĄ być uruchamiane jako superuser. Co mam zrobić tak daleko jest coś takiego:Jak napisać skrypt powłoki, który uruchamia niektóre polecenia jako superuser i niektóre polecenia nie jako superuser, bez konieczności opiekowania się nim?
#!/bin/bash
command1
sudo command2
command3
sudo command4
Problemem jest, oznacza to, że ktoś musi czekać aż polecenie1 kończy zanim się monit o hasło, a następnie, jeśli command3 trwa wystarczająco długo, będą następnie muszą czekać na zakończenie komendy3. Byłoby miło, gdyby osoba mogła wstać i odejść, a potem wrócić godzinę później i być skończona. Na przykład, poniższy skrypt ma ten problem:
#!/bin/bash
sleep 310
sudo echo "Hi, I'm root"
sleep 310
sudo echo "I'm still root?"
Jak mogę to zrobić tak, że użytkownik może wprowadzić swoje hasło tylko raz, na samym początku, a następnie odejść?
Aktualizacja:
Dzięki za odpowiedzi. Biegnę na Mac OS X Lion i pobiegł scenariusz Stephen P i mam różne wyniki: (ja również dodaje $ HOME)
[email protected] scratch$ ./test2.sh
uid is 501
user is pair
username is
home directory is /Users/pair
[email protected] scratch$ sudo ./test2.sh
Password:
uid is 0
user is root
username is root
home directory is /Users/pair
Można także powłokę skrypt, którego właścicielem jest root i ma ustawiony bit 'suid', ale może to być niebezpieczne, jeśli nie zrobisz tego poprawnie. Za każdym razem, gdy uruchamiasz skrypty powłoki jako root, możesz rozważyć użycie 'pułapki' do obsługi sygnałów. http://www.shelldorado.com/goodcoding/tempfiles.html ma kilka przykładów. –
Dziwne, ja naprawdę dostaję różne wyniki. Jest to na Mac OS X Lion: '@ opactwo parę zadrapanie $/test2.sh'
' uid jest 501'
'użytkownik pair'
' nazwa to ''
katalog domowy to/Users/para. ''
para @ opactwo zarysowania $ sudo ./test2.sh ''
Hasło: ''
uid jest 0'
'użytkownik root'
' nazwa_użytkownika jest root'
'katalogiem domowym jest/Users/pair'
'pair @ abbey scratch $ sudo -u pair ./test2.sh'
'uid is 501'
'użytkownik pair'
' nazwa_użytkownika jest pair'
'katalog domowy to/Users/pair'
– speedarius
Przepraszamy za formatowania powyższego komentarza; Aktualizuję oryginalny wpis teraz .. – speedarius