Как мне создать окно как sudo из .screenrc

281
BWPanda

Я создал .screenrcфайл для автоматической настройки различных окон при запуске screen. В одном окне я бы хотел: переключиться на пользователя root, а затем перейти в определенный каталог. В настоящее время я делаю это вручную после создания нового окна экрана следующим образом:

  • sudo bash
  • cd /etc/[dir]/

Как я могу повторить это в .screenrc? Я читал в другом месте, что для запуска нескольких команд в одной строке вы можете использовать &&, но я не могу заставить его работать sudo bash(предположительно, потому что он создает новый экземпляр bash и поэтому остальные команды либо игнорируются, либо запускаются). в новом экземпляре, а затем вышел).

0
Добавьте в конец `/ root / .profile` свою команду` cd / etc / [dir] / `и делайте на экране только` sudo bash`. Убедитесь, какой [путь] (https://superuser.com/a/1344589/164837) ваш bash принимает при запуске Alex 5 лет назад 1
@Alex: Если бы этот комментарий был ответом, я бы его понизил, потому что он излишне влияет на _everything else_, который может запускать -bash от имени пользователя root, включая входы в консоль, входы SSH, `su -`,` sudo -i` и т. Д. grawity 5 лет назад 0
@harrymc Я не вижу никаких негативных последствий при переходе с домашнего каталога на / etc, но я согласен с вами, это не очень хорошее решение. Я думаю, что лучше сделать это в * .screenrc *, например `screen -t sudobash stuff" cd '/ etc / [dir]'; ^ M "` Alex 5 лет назад 0

1 ответ на вопрос

1
grawity

(предположительно потому что он создает новый экземпляр 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" 

Похожие вопросы