Что произошло после sudo -s

Я новичок в оболочке.

Я пишу очень простой скрипт:

#!/bin/bash example() { echo "Code that don't need sudo." sudo -s echo "Code that need sudo" } example 

После запуска этого сценария я ожидаю:

  1. prompt Code that don't need sudo.

  2. shell спросить меня пароль

  3. если пароль в порядке, введите Code that need sudo.

Но после ввода хорошего пароля введите Code that need sudo. не появляется почему и как его исправить?

  • Есть ли лучшие / более безопасные методы запуска OpenVPN-клиента как обычного пользователя?
  • Может sudo заменить su?
  • Защитить папку от sudoers
  • Механизм хранения паролей в судо
  • Установить скрипт - совместимость авторизации sudo?
  • Выполнить su -s с аргументами
  • Как отключить ведение журнала, связанное с sudo, для успешного выполнения команды в CentOS / Fedora?
  • Msgstr "sudo: извините, вы должны иметь tty для запуска sudo" при использовании sudo в удаленном скрипте
  • 2 Solutions collect form web for “Что произошло после sudo -s”

    Это потому, что sudo -s запускает корневую оболочку, и именно там вы оказываетесь после ввода пароля. Если вы выйдете из оболочки, вы увидите Code that need sudo :

     $ foo.sh Code that don't need sudo. [sudo] password for terdon: [root@tpad terdon]# exit Code that need sudo 

    В общем, во всех сценариях, когда вы говорите ему, чтобы запустить команду, скрипт будет продолжать выполнение только после завершения команды. Итак, когда ваш скрипт запустил sudo -s , он ждал, пока это закончится, прежде чем продолжить. Вот почему текст был напечатан после того, как я запустил exit (или нажал Ctrl + D ).

    -s без команды запускает интерактивную оболочку, поэтому вы больше не будете в той же оболочке, что и скрипт.

    Подробнее см. man sudo .

    Это должно работать, хотя:

     #!/bin/bash example() { echo "Code that don't need sudo." sudo -s echo "Code that need sudo" } example 
    Linux и Unix - лучшая ОС в мире.