Что произошло после 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. не появляется почему и как его исправить?

  • Почему я могу копировать файлы, но не создавать файлы в этом каталоге?
  • Переменная HOST в / etc / sudoers
  • Как включить `sudo` с пользовательскими функциями?
  • `sudo tar`, но имеет полученный файл
  • Как безопасно выполнять php-файл как другой пользователь?
  • Как я могу выполнить некоторые команды в сценарии оболочки с `sudo`, а другие нет?
  • Как я могу запустить setfacl -m group: group2: rwx / dev / video0 / dev / snd / * при входе в систему?
  • Как разрешить пользователям без полномочий root управлять службой systemd с помощью экземпляров?
  • 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 - лучшая ОС в мире.