Aby ręcznie wykonać poprawkę, muszę wpisać to polecenie
sudo ./playback_delete_data_patch.sh 09_delete_old_data_p.sql
Tuż przed 09 jest miejsce:
sudo ./playback_delete_data_patch.sh [space] 09_delete_old_data_p.sql
Jak mogę uruchomić to w skrypcie?
Istnieje również kilka innych poleceń, ale to sprawia problemy.
sudo
hasło - skrypt nie będzie w stanie uruchomić się w pełni, jeśli kogoś tam nie będzie.sudoers
konfigurację. Nie ma sprawy. To po prostu wymaga naprawy.Odpowiedzi:
Rzadko warto mieć
sudo
wewnętrzne skrypty. Zamiast tego usuńsudo
skrypt ze skryptu i uruchom sam skrypt za pomocąsudo
:W ten sposób wszystkie polecenia w skrypcie będą uruchamiane z uprawnieniami administratora, a hasło trzeba podać tylko raz podczas uruchamiania skryptu. Jeśli potrzebujesz określonej komendy w skrypcie, aby uruchamiać się bez
sudo
uprawnień, możesz uruchomić ją jako zwykły użytkownik za pomocą (dzięki Lie Ryan ):Spacja jest nieistotna, nie powinna na nic wpływać, zawsze jest spacja między poleceniem a jego argumentami.
źródło
sudo
w skrypcie jawne wywołania, ponieważ podniesienie całego skryptu do roota może być okropnym pomysłem, jeśli istnieje tylko kilka wąskich działań, które wymagają rootowania. W tym kontekście odpowiadałem konkretnie na twój komentarz: „W dużej mierze, ponieważ oznacza to, że nie możesz uruchomić skryptu automatycznie, ponieważ będziesz musiał wprowadzić hasło za każdym razem, gdy zostaniesz o to poproszony”.Możesz ewentualnie zmodyfikować
sudoers
plik.Uruchom
sudo visudo
.Dodaj wpis dla swojej nazwy użytkownika i skryptu, który chcesz uruchomić bez pytania o hasło.
źródło
sudoers
.Możesz spróbować czegoś takiego:
To nie jest najbezpieczniejsza rzecz, ponieważ piszesz hasło sudoer zwykłym tekstem. Aby było trochę bardziej bezpieczne, możesz utworzyć zmienną i wczytać hasło sudo do zmiennej, a następnie możesz wykonać polecenie jako:
Ponadto, jeśli nie przeszkadza ci wykonywanie wszystkich poleceń jako root, możesz po prostu uruchomić skrypt za pomocą
sudo
, jak wcześniej sugerowano.źródło
read -s PASSWORD
Ta odpowiedź jest podobna do odpowiedzi Terdona . Sugerowałbym również uruchomienie skryptu głównego,
sudo
aby skrypt mógł działać bez konieczności podawania hasła użytkownika podczas jego wykonywania.Jednak w przypadku, gdy chcesz upuścić uprawnienia administratora do niektórych poleceń i uruchomić je jako rzeczywisty użytkownik, który wywołał polecenie
sudo
, możesz sprawdzić, czy$SUDO_USER
zmienna pozwala ustalić oryginalnego użytkownika.Oto przykładowy skrypt, w jaki sposób możesz to osiągnąć:
źródło
Jest o wiele prostszy sposób na zrobienie tego. Jeśli chodzi o przenośność, jest to moja implementacja, ale możesz ją dowolnie modyfikować w zależności od potrzeb.
Wprowadź swoje hasło sudo jako parametr podczas uruchamiania skryptu, przechwyć je i powtórz za pomocą każdej komendy, która poprosi o podanie hasła sudo.
Możesz dodać monit i przechwycić po uruchomieniu skryptu w następujący sposób:
Ale jeśli ktoś inny monitoruje to, co działa w węźle; ma dostęp do utworzonych przez niego dzienników; lub po prostu losowo przegląda twój test, kiedy może to zagrozić bezpieczeństwu.
Działa to również z uruchomionymi poleceniami / skryptami, które wymagają tak, aby kontynuować:
Echo jest odpowiedzią na monit, więc możesz użyć tam wszystkiego, czego potrzebujesz, jeśli uruchamiasz inne skrypty z monitami o postęp, w kolejności sekwencyjnej. Upewnij się jednak, że znasz tę kolejność, ponieważ mogą się zdarzyć złe rzeczy.
źródło
read
: ryanstutorials.net/bash-scripting-tutorial/bash-input.php To powinno uniknąć tego problemuźródło
Możesz spróbować dodać użytkownika uruchamiającego skrypt do pliku sudoers:
źródło