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

0

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

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

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

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

Ответы:

1

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