(предположительно потому что он создает новый экземпляр bash
Да, это же практически со всеми пользователями переключения механизмов ( su
, sudo -s
и т.д.), но ваш вариант делает его совершенно очевидно, что новый bash
процесс бежится.
и поэтому остальные команды либо игнорируются, либо запускаются в новом экземпляре, а затем завершаются).
Нет, родительская оболочка просто ожидает sudo
- и, следовательно, новый экземпляр bash - для выхода. (Как это было бы с любой другой командой.)
- Основная оболочка запускается
sudo bash
и ожидает ее выхода.- Судо бежит
bash
и ждет его выхода.- Bash дает вам интерактивное приглашение, в котором вы запускаете свои корневые команды.
- Когда вы набираете «exit», bash выходит.
- sudo заканчивает ожидание, убирает и выходит также.
- Судо бежит
- Основная оболочка завершает ожидание, запускает следующую команду, если таковая имеется.
Однако вы можете указать любой оболочке выполнять команды неинтерактивно, используя ее -c
опцию, которая принимает одну командную строку: например bash -c "cd /etc && ls"
. (Это используется за кулисами ssh
или su -c
.)
Чтобы получить интерактивную оболочку, просто убедитесь, что последняя команда в этой подкоманде запускает интерактивную оболочку. (Это довольно много примеров bash, но это не проблема.)
sudo bash -c "cd /etc/foo && bash"