1. Uzyskiwanie powłoki z nową grupą bez wylogowania i ponownego zalogowania
Jeśli dodajesz tylko jedną grupę, użyłem następujących:
exec sg <new group name> newgrp `id -gn`
Jest to odmiana dwuwarstwowej sztuczki newgrp Legooolas, ale jest w jednym wierszu i nie wymaga ręcznego wprowadzania grupy podstawowej.
sg
jest newgrp, ale przyjmuje polecenie wykonania z nowym identyfikatorem grupy. Te exec
środki, że nowa powłoka zastępuje istniejącą powłokę, dzięki czemu nie trzeba „wylogowania” dwukrotnie.
W przeciwieństwie do su, nie musisz wpisywać swojego hasła. Nie odświeża również twojego środowiska (oprócz dodawania grupy), więc zachowujesz swój bieżący katalog roboczy itp.
2. Wykonanie polecenia we wszystkich oknach ekranu w sesji
at
Komenda w ekran uruchamia polecenie w cokolwiek okna można określić (zauważ, że jest to polecenie ekranu, a nie polecenie powłoki).
Możesz użyć następującego polecenia, aby wysłać polecenie do wszystkich istniejących sesji Screen:
screen -S <session_name> -X at \# stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"
Zwróć uwagę na potrzebę ucieczki przed backstickami, aby id
uruchomić w sesji Screen, oraz ^ M, aby Screen uderzył „enter” na końcu twojego polecenia.
Zauważ też, że stuff
polecenie screena po prostu wpisuje tekst polecenia w twoim imieniu. Dlatego może się zdarzyć coś dziwnego, jeśli jedno z okien ekranowych ma w połowie napisane polecenie w wierszu polecenia lub uruchamia aplikację inną niż powłoka (np. Emacs, top). Jeśli to jest problem, mam kilka pomysłów:
- Aby pozbyć się w połowie napisanego polecenia, możesz dodać „^ C” na początku polecenia.
- Aby uniknąć uruchamiania polecenia w oknie emacsa itp., Możesz poprosić `at 'o filtrowanie według tytułu okna itp. (W powyższym przykładzie używam„ # ”, który pasuje do wszystkich okien, ale możesz filtrować według tytułu okna, użytkownika itp.).
Aby uruchomić polecenie w określonym oknie (oznaczonym numerem okna), użyj następujących poleceń:
screen -S <session_name> -p 0 -X stuff "exec sg <new_group_name> newgrp \`id -gn\`^M"