1. Eine Shell mit der neuen Gruppe erstellen, ohne sich aus- und wieder einzuloggen
Wenn Sie nur eine Gruppe hinzufügen, habe ich Folgendes verwendet:
exec sg <new group name> newgrp `id -gn`
Dies ist eine Variation des zweischichtigen Newgrp-Tricks von Legooolas, aber es befindet sich in einer Zeile und erfordert nicht, dass Sie Ihre primäre Gruppe manuell eingeben.
sg
ist newgrp, akzeptiert jedoch einen Befehl zur Ausführung mit der neuen Gruppen-ID. Dies exec
bedeutet, dass die neue Shell die vorhandene Shell ersetzt, sodass Sie sich nicht zweimal abmelden müssen.
Im Gegensatz zur Verwendung von su müssen Sie Ihr Passwort nicht eingeben. Es aktualisiert auch nicht Ihre Umgebung (außer das Hinzufügen der Gruppe), so dass Sie Ihr aktuelles Arbeitsverzeichnis usw. behalten.
2. Führen Sie den Befehl in allen Bildschirmfenstern einer Sitzung aus
Der at
Befehl in Screen führt einen Befehl in den von Ihnen angegebenen Fenstern aus (beachten Sie, dass dies ein Screen-Befehl ist, kein Shell-Befehl).
Mit dem folgenden Befehl können Sie den Befehl an alle vorhandenen Bildschirmsitzungen senden:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
Beachten Sie, dass Sie die Backticks entziehen müssen, um id
in der Screen-Sitzung ausgeführt zu werden, und das ^ M, um Screen zu veranlassen, am Ende Ihres Befehls die Eingabetaste zu drücken .
Beachten Sie auch, dass der stuff
Befehl des Bildschirms einfach den Befehlstext in Ihrem Namen eingibt. Daher kann etwas Seltsames passieren, wenn eines der Bildschirmfenster an einer Eingabeaufforderung einen halb geschriebenen Befehl enthält oder eine andere Anwendung als eine Shell ausführt (z. B. emacs, top). Wenn dies ein Problem ist, habe ich einige Ideen:
- Um halbgeschriebene Befehle zu entfernen, können Sie "^ C" an den Anfang des Befehls setzen.
- Um zu vermeiden, dass der Befehl in einem Emacs-Fenster usw. ausgeführt wird, können Sie `at 'auffordern, nach Fenstertitel usw. zu filtern (im obigen Beispiel verwende ich" # ", das mit allen Fenstern übereinstimmt, aber Sie können nach Fenstertitel und Benutzer filtern , usw).
Verwenden Sie Folgendes, um den Befehl in einem bestimmten Fenster (gekennzeichnet durch die Fensternummer) auszuführen:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"