У мене є сценарій оболонки, в якому більшість команд потрібно запустити під sesu
користувачем, а потім мені потрібно виконати деякі команди як поточний користувач. Чи можете ви мені допомогти в цьому?
У мене є сценарій оболонки, в якому більшість команд потрібно запустити під sesu
користувачем, а потім мені потрібно виконати деякі команди як поточний користувач. Чи можете ви мені допомогти в цьому?
Відповіді:
Якщо ви не хочете кожен раз вказувати пароль, додайте sesu
до sudoers
групи і виконайте потрібну команду таким чином:
sudo su -c "command string"
Цей спосіб command string
працює як суперпользователь (root тощо).
Команда
exit
закриває поточну оболонку. Якщо ви працювали з оболонкою, як користувач X , а потім переходите на користувача Y , вихід закриває оболонку, в якій ви були Y, і повертає вас до X
Ви можете використовувати su
для переходу на іншого користувача та -c
опцію для виконання команди, наприклад
su anotherUser -c "ls /"
Перевірте, чи є у вас, sudo
і подумайте, чи можете ви використовувати його у вашому випадку. Наведений вище зразок запитає пароль іншого Користувача, і це може дратувати.
Я нещодавно опинився в подібній ситуації. Ось що я зробив, щоб негайно перейти на рівень суперпользователя, коли викликається сценарій, а згодом виконувати завдання звичайного користувача. Я думаю, що це може допомогти вам знайти спосіб досягти бажаного рішення:
#!/bin/bash
# generic_sudo.sh
# Tool that demonstrates in-then-out of sudo
# This demo is pointless if called with 'sudo generic_sudo.sh'
# Need root priviledges for some superuser work
if (( EUID != 0 )); then # If the user is not "root":
# In general one should use ((..)) for testing numbers and integer variables, and [[..]] for testing strings and files.
sudo $0 # Relaunch it as "root".
EXITCODE=$?
printf "su mode OFF.\n" # If we got here, we left superuser mode
printf "EUID is: %d\n" $EUID
printf "Exit code %d\n" $EXITCODE
exit $EXITCODE # Once it finishes, exit gracefully.
else
printf "su mode ON.\n"
fi # End if.
printf "EUID is: %d\n" $EUID
# Some superuser work
printf "Some superuser work was done.\n"
exit 0