Theo.Spengler
Anmeldungsdatum: 4. Januar 2019
Beiträge: 56
|
Gegeben:
* ein aktuelles Ubuntu System gesucht:
Eine Lösung, mit der man in bash per echo, die Nummer der Arbeitsfläche ausgeben kann in der das entsprechende bash Script läuft: Gefundene Teillösung:
Ausgabe der verfügbaren Arbeitsflächen. Die aktive ist hierbei jeweils mit einem Stern gekennzeichnet:
| wmctrl -d # Abfrage der verfügbaren Arbeitsflächen
# Ausgabe
0 * DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 1
1 DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 2
2 DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 3
3 DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 4
|
Ausgabe der verfügbaren Arbeitsflächen:
| wmctrl -d wmctrl -d | grep "*" # Abfrage, mit Filterung
# Ausgabe der Zeile die die aktive Arbeitsfläche. Sie wird hierbei am Ende der Zeile benannt:
0 * DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 1
|
Frage:
Wie kann ich folgendes anpassen:
| var=wmctrl -d wmctrl -d | grep "*" | grep ??? # nicht funktionierend
|
damit ich bei folgendem:
dann die folgende Ausgabe erhalte:
| 1 # hier ist die Nummer der Arbeitsfläche aus obigem Beispiel gemeint
|
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3553
|
activedesktop=$(wmctrl -d | grep "*" | awk '{print $11}')
|
Theo.Spengler
(Themenstarter)
Anmeldungsdatum: 4. Januar 2019
Beiträge: 56
|
dingsbums schrieb: activedesktop=$(wmctrl -d | grep "*" | awk '{print $11}')
echo $activedesktop
# Ausgabe:
1
Das funktioniert soweit schon mal. Besten Dank. Kann man das auch ohne awk machen ?
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3553
|
activedesktop=$(wmctrl -d | grep "*" | rev | cut -d ' ' -f1) Aber bitte frage jetzt nicht, ob man das auch ohne grep machen kann. 😉
|
Theo.Spengler
(Themenstarter)
Anmeldungsdatum: 4. Januar 2019
Beiträge: 56
|
dingsbums schrieb: activedesktop=$(wmctrl -d | grep "*" | rev | cut -d ' ' -f1) Aber bitte frage jetzt nicht, ob man das auch ohne grep machen kann. 😉
Das ist perfekt für mich. Danke ! activedesktop=$(wmctrl -d | grep "*" | rev | cut -d ' ' -f1)
echo $activedesktop
|
trollsportverein
Anmeldungsdatum: 21. Oktober 2010
Beiträge: 3422
|
dingsbums schrieb: activedesktop=$(wmctrl -d | grep "*" | rev | cut -d ' ' -f1) Aber bitte frage jetzt nicht, ob man das auch ohne grep machen kann. 😉
wmctrl -d | awk '/*/{print $11}'
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3553
|
Ja, awk wollte er aber nicht. Ohne awk und ohne grep wirds wohl schwierig werden. Wo bleiben die Vorschläge der Spezialisten? 😉
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
dingsbums schrieb: Ja, awk wollte er aber nicht. Ohne awk und ohne grep wirds wohl schwierig werden. Wo bleiben die Vorschläge der Spezialisten? 😉
Challenge accepted: | wmctrl -d | until read idx mark rest && [ "$mark" = '*' ] && echo "$idx"; do :; done
|
Funktioniert sogar in der sh
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3553
|
Theo.Spengler schrieb: # Ausgabe der Zeile die die aktive Arbeitsfläche. Sie wird hierbei am Ende der Zeile benannt:
0 * DG: 800x600 VP: 0,0 WA: 0,0 800x600 Workspace 1
rklm schrieb: Challenge accepted:
Bei deinem Einzeiler kommt bei mir 0 (die laufende Nr.) heraus, nicht 1 (für Desktop 1). Nochmal bitte.
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
dingsbums schrieb:
Bei deinem Einzeiler kommt bei mir 0 (die laufende Nr.) heraus, nicht 1 (für Desktop 1). Nochmal bitte.
Ach komm, +1 kannst Du auch so rechnen. Das bekommt man mit Shell-Bordmitteln leicht hin.
|
dingsbums
Anmeldungsdatum: 13. November 2010
Beiträge: 3553
|
War mir nicht sicher, ob das immer lfd. Nr. + 1 ist, wenn man z.B. mittendrin WS 3 von 4 löscht.
Gerade probiert, scheint sich immer neu zu sortieren. ▶ 👍
|
trollsportverein
Anmeldungsdatum: 21. Oktober 2010
Beiträge: 3422
|
So könnte es auch gehen:
wmctrl -d | perl -lane 'print $F[-1] if /[*]/'
|
rklm
Projektleitung
Anmeldungsdatum: 16. Oktober 2011
Beiträge: 12829
|
dingsbums schrieb: War mir nicht sicher, ob das immer lfd. Nr. + 1 ist, wenn man z.B. mittendrin WS 3 von 4 löscht.
Gerade probiert, scheint sich immer neu zu sortieren.
Wenn nicht, ginge | wmctrl -d | until read idx mark rest && [ "$mark" = '*' ] && echo "${rest##* }"; do :; done
|
|