Wie erstelle ich ein Fenster als Sudo aus .screenrc

382
BWPanda

Ich habe eine .screenrcDatei erstellt, um meine verschiedenen Fenster beim Start automatisch einzurichten screen. In einem Fenster möchte ich: zum Root-Benutzer wechseln und dann in ein bestimmtes Verzeichnis wechseln. Ich mache dies derzeit manuell, nachdem ich ein neues Fenster wie folgt erstellt habe:

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

Wie kann ich das replizieren .screenrc? Ich habe an anderer Stelle gelesen, dass Sie mehrere Befehle in einer Zeile ausführen können &&, aber ich kann nicht damit zurechtkommen sudo bash(vermutlich, weil dadurch eine neue Bash-Instanz erstellt wird und der Rest der Befehle entweder ignoriert oder ausgeführt wird) in der neuen Instanz und dann beendet).

0
Fügen Sie am Ende `/ root / .profile` Ihren Befehl` cd / etc / [dir] / `hinzu und tun Sie im Bildschirm nur` sudo bash`. Stellen Sie sicher, welchen [Pfad] (https://superuser.com/a/1344589/164837) Ihre Bash beim Start nimmt Alex vor 5 Jahren 1
@Alex: Wenn dieser Kommentar eine Antwort wäre, würde ich ihn ablehnen, weil er alles andere unnötig beeinflusst, das als root ausgeführt werden kann, einschließlich Konsolen-Logins, SSH-Logins, `su -`,` sudo -i` usw. grawity vor 5 Jahren 0
@ harrymc Ich sehe keine negativen Auswirkungen beim Wechsel vom Home-Verzeichnis nach / etc, aber ich stimme dir zu, es ist keine schöne Lösung. Ich denke, es ist besser mit * .screenrc * wie `screen -t sudobash stuff" cd "/ etc / [dir] '; ^ M" ` Alex vor 5 Jahren 0

1 Antwort auf die Frage

1
grawity

(vermutlich, weil dadurch eine neue Bash-Instanz erstellt wird

Ja, bei praktisch allen Benutzerwechselmechanismen ( su, sudo -susw.) ist es dasselbe, aber Ihre Variante macht deutlich, dass ein neuer bashProzess ausgeführt wird.

Der Rest der Befehle wird entweder ignoriert oder in der neuen Instanz ausgeführt und dann beendet.

Nein, die übergeordnete Shell wartet einfach auf sudodas Beenden der neuen Bash-Instanz. (Wie bei jedem anderen Befehl.)

  • Die Main-Shell wird ausgeführt sudo bashund wartet, bis sie beendet wird.
    • Sudo läuft bashund wartet, bis es beendet wird.
      • bash gibt Ihnen eine interaktive Eingabeaufforderung, in der Sie Ihre Root-Befehle ausführen.
      • Wenn Sie 'exit' eingeben, wird bash beendet.
    • sudo beendet das Warten, räumt auf und geht auch aus.
  • Main Shell beendet das Warten, führt den nächsten Befehl aus, falls vorhanden.

Sie können jedoch jeder Shell mitteilen, dass sie Befehle nicht interaktiv ausführen soll, indem Sie ihre -cOption verwenden, die eine einzige Befehlszeile akzeptiert: z bash -c "cd /etc && ls". (Dies wird im Hintergrund von sshoder verwendet su -c.)

Um eine interaktive Shell zu erhalten, stellen Sie sicher, dass der letzte Befehl in diesem Unterbefehl einer ist, der eine interaktive Shell ausführt. (Das sind schon einige Bash-Instanzen, aber eigentlich kein Problem.)

sudo bash -c "cd /etc/foo && bash"