2

Прежде всего, я совершенно новый в этом мире Linux. Поэтому, пожалуйста, учтите это, когда будете читать. Я получил от 10 до 20 строк кода Bash, которые мне нужно периодически запускать. Вчера я пытался поместить эти строки в один файл bash, чтобы я мог просто запустить их одной командой. Но я застрял в какой-то момент, потому что код содержит некоторые операции, которые могут выполняться только при входе в оболочку, например, «cd /root». Теперь, каждый раз, когда я запускаю их, мне нужно войти в оболочку с помощью 'sudo -s' через некоторое время. Вот часть моих кодов.

cd ~
cp -Rf $worthy_folders /root/
sudo -s
cd /root
sudo chown -R root:root $worthy_folders

Очевидно, я не могу записать их в файл Bash, как они есть. Это просто запрашивает у меня пароль и нужно нажать несколько ввода. А также «sudo cd» не работает. Итак, мой вопрос, есть ли способ написать эти команды в одном файле Bash и просто запустить их?

1 ответ1

2

Вы можете поместить все это в файл, скажем myscript.sh, а затем запустить все с помощью sudo:

$ sudo myscript.sh

Таким образом, sudo происходит перед любым сценарием. Если это неприемлемо, вы можете выполнить sudo одновременно несколько команд:

$ sudo bash -c "cd /root; chown -R root:root $worthy_folders"

Хотя это не сильно отличается, но, по крайней мере, вы можете запустить небольшое подмножество команд с повышенными привилегиями вместо всех команд.

И просто в качестве подсказки - да, это раздражает, когда в середине скрипта запрашивается пароль, и, если есть вероятность состояния гонки, это может быть опасно. Вы можете сделать так, чтобы sudo проверил вас, вызвав его с флагом -v. Это запросит ваш пароль, если потребуется, и сбросит отметку времени, чтобы перезапустить время ожидания, указанное в файле sudoers.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .