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

Это потому, что 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