Używam Ubuntu i mogę ręcznie zmienić bash
kolor zachęty powłoki na zielony za pomocą
export PS1="\e[0;32m[\u@\h \W]\$ \e[m"
Chcę jednak, aby kolor zachęty powłoki zmieniał się automatycznie za każdym razem, gdy otwieram nowy terminal lub kartę. Wiem, że podstawowy tty TERM ma 16 kolorów i można obracać kolorami, jeśli więcej niż 16 terminali jest otwartych. Czy rozwiązanie zadziała również, gdy się połączę Putty
, tmux
lub screen
.
Moim pomysłem jest napisanie skryptu powłoki i umieszczenie go w taki sposób, aby .bashrc
wykrywał nową sesję terminala, którą użytkownik otworzył, i zwiększał licznik globalny od \e[0;31m[
do \e[0;47m[
. Jak wykryć liczbę otwartych terminali przez użytkownika?
źródło
tty
. Myślę, że my / inni zbytnio skoncentrowaliśmy się na tym „pytaniu” i zapomnieliśmy, że mogą istnieć inne rozwiązania dla całej „potrzeby” :) Bawiłbym się nawet implementacją losowego wyboru koloru. Jeśli jest to 256 kolorów, wybranie takich samych / podobnych kolorów nie powinno się zdarzyć dużo. Jednak ręczne ustawienie kolorów dla danych liczb pts zapewni lepszą personalizację.color="\e[38;5;"$(((RANDOM % 231 )+1))"m"
(tylko 231, aby odrzucić skalę szarości), jednak wiele z tych kolorów miało po prostu różne odcienie, a kilka z nich jest ciemnych, więc może być prawie niewidocznych, a ja sądzę, że nikt nie użyje tego w prawdziwym życiu ...W sytuacji jednego użytkownika, jeśli weźmiemy przykład
xterm
, możemy po prostu policzyć liczbę pidxterm
;xterm
tworzy osobny pid dla każdego okna.gnome-terminal
uruchamia jednak pojedynczy pid, ale dobrą wiadomością jest to, że tworzy proces potomny dla każdego okna i / lub karty. możemy pobrać te procesy potomne za pomocą polecenia:Istnieje jednak kilka komplikacji:
Czytając twoje pytanie, możemy założyć, że użytkownik w tym przypadku jest faktycznie właścicielem sesji x . Zwykle możemy po prostu użyć opcji
$USER
-variable, ale może to nie pasować do aktualnie zalogowanego użytkownika$DISPLAY
.W sytuacji wielu użytkowników pidy należące do (której) aplikacji terminalowej niekoniecznie należą do bieżącej
$DISPLAY
. Musimy oddzielić tylko odpowiednie pids i pids dla dzieci.W Unity (15.10 lub niższej), jeśli zaloguje się drugi użytkownik, uruchamiany jest dodatkowy proces (
gnome-pty-helper
), który pojawia się jako proces potomnygnome-terminal
, ale proces (oczywiście) nie ma okna ani karty. Na Mate proces i tak istnieje.W skrócie
Aby policzyć liczbę kart i / lub okien aplikacji terminalowej, musimy:
$DISPLAY
(sesja x)$DISPLAY
gnome-pty-helper
działa, aby poprawić liczbę.Można to jednak dobrze napisać w skrypcie, aby niezawodnie znaleźć liczbę aktualnie otwartych okien i / lub kart.
Scenariusz
W poniższym skrypcie jako argument używana jest docelowa aplikacja terminalowa . Skrypt działa na wielu terminalach, na których go testowałem. W
Tilda
tej chwili jest wyjątek .Przykład
gnome-terminal
oknami, jeden (jeden na obrazku) z trzemagnome-terminal
oknami i dwomaxterm
oknami.Komenda:
wyjścia:
podczas
wyjścia:
Scenariusz
Używać
Skopiuj skrypt do pustego pliku, zapisz go jako
get_terms.sh
, wykonaj go i uruchom za pomocą polecenia:źródło
gnome-pty-helper
uruchomiony, nawet gdy zalogowany jest tylko jeden użytkownik (zaraz po ponownym uruchomieniu), a kiedy otwieram dowolną liczbę terminali, działa on drugi, ten sam pomocnik. Twój nowy skrypt wydaje się działać dla mate-terminal (nie był w stanie spowodować tego zerowego), ale w Xterm, gdy mam tylko 1 otwarty, pokazuje0
i zaczyna pokazywać dobrą liczbę dopiero po drugim i z gnome-terminal zawsze pokazuje o jeden za mało (wyjście,0
gdy tylko jeden jest otwarty).awk
Sposób:Wyjaśnienie:
W powyższym 1 poleceniu linijki
awk
służy do znalezienia liczby terminali. Wewnątrzawk
programu sprawdza tylko liczbę wierszy zwracanych przez komendę - 1.źródło
who | awk 'END{print NR - 1}'
ponieważ chcesz, aby liczba linii - 1.Prostym sposobem może być również uruchomienie
System Monitor
(jeśli uruchamiasz z Terminala, musisz napisaćgnome-system-monitor
) i w zakładce „Procesy” uporządkuj uruchomione procesy według Nazwy, a następnie policz liczbę wystąpieńBash
na liście (będą one wszystkie razem, jeśli zorganizujesz według imię, więc łatwo policzyć).Pamiętaj, że musisz szukać,
Bash
a nie,Gnome Terminal
jeśli chcesz zobaczyć liczbę otwartych terminali według użytkownika. Po otwarciu terminalGnome Terminal
pojawi się również na liście procesów, ale pozostanie tylko jeden, nawet jeśli zostanie otwartych więcej terminali. Przycisk „Widok”System Monitor
umożliwia ustawienie procesów, które chcesz zobaczyć, np. Wszystkie procesy / procesy użytkownika / aktywne ...źródło