Ich würde als Alternative folgendes vorschlagen:
RUN_ONCE="/tmp/$UID_run_once
if [ ! -f ${RUN_ONCE} ]; then
touch ${RUN_ONCE}
fastfetch --load-config examples/7.jsonc --logo /usr/share/fastfetch/presets/examples/fflogo.txt
fi
unset RUN_ONCE
Kitty, neues window ohne fetch
- Bearbeitet
TC Ich will nicht ausschließen, das ich Mist gebaut habe 🙂 Habe mein System gerade nicht im Zugriff und machs gerade aus dem Kopf, aber gib mal Hab ich ...ps -e | grep '[k]ittie'
ein (also ohne -c
), wenn du nur ein Fenster auf hast, solltest du eine Zeile als Ergebnis bekommen.
Edit: Ich hab jetzt mal nach der Manpage geguckt. Es müsste grep -ce
sein, damit er die eckigen Klammern richtig interpretiert ✨
[ "$(ps -e | grep -ce '[k]ittie')" -lt 2 ] && fastfetch --load-config examples/7.jsonc --logo /usr/share/fastfetch/presets/examples/fflogo.txt
-c
fürcount
, damit grep statt der gefundenen Zeilen die Anzahl der Zeilen ausgibt-e
fürexpression
damit grep den Suchbegriff als regulären Ausdruck interpretiert
Ohne -e
sollte genau so klappen, dann aber statt [k]ittie
nach kittie
suchen (und statt -lt 2
dann -lt 3
). Das ist eigentlich nur ein Trick, damit grep sich nicht selbst findet - und ich bin mir nicht mal mehr sicher, ob das überhaupt noch nötig ist.
leider zeigt das alles keinen erfolg. mein weg ging anfangs über die kitty.conf
mit dem shortcut
map ctrl+enter launch clear
aber das hat des neue fenster direkt geschlossen
- Bearbeitet
Dirk Ohne -e sollte genau so klappen, dann aber statt [k]ittie nach kittie suchen (
Warum wird nach kittie
gesucht, und nicht nach dem Namen des Prozesses kitty
?
kittie
wird als Ergebnis von grep
stets 0
liefern, damit ist die Bedingung -lt 2
immer WAHR
und fastfetch
wird unabhängig von der Anzahl tatsächlich gestarteter kitty
-Prozesse immer ausgeführt.
@TC: Versuche mal folgendes:
if [ $(pgrep -c "kitty") -lt 2 ] ; then fastfetch ; fi
- Bearbeitet
Martin-MS Warum wird nach kittie gesucht, und nicht nach dem Namen des Prozesses kitty?
kittie wird als Ergebnis von grep stets 0 liefern, damit ist die Bedingung -lt 2 immer WAHR und fastfetch wird unabhängig von der Anzahl tatsächlich gestarteter kitty-Prozesse immer ausgeführt.
hab ich getestet, kein erfolg.
das muss doch einfacher zu lösen sein.
laut der kitty website kann ich in der config ein neues fenster mit multiplen aufgaben starten. dort ist das beispiel:
map f1 launch sh -c "ls && exec zsh"
leider funktionier das überhaupt nicht. das fenster wird sofort geschlossen, warum auch immer.mit oder ohne anführungszeichen
nehme ich den auzuführenden befehl weg und starte
map f1 launch sh
kommt leeres fenster mit der anzeige
sh-5.2$
direkt vor meinem curser der normal nutzbar ist.
also fast am ziel 🙂
- Bearbeitet
Martin-MS Warum wird nach kittie gesucht, und nicht nach dem Namen des Prozesses kitty?
LOL, ja 😃 Du hast natürlich recht. Der zu zählende Prozess muss natürlich richtig benannt werden.
TC nehme ich den auzuführenden befehl weg und starte
map f1 launch sh
kommt leeres fenster mit der anzeige
sh-5.2$
Wenn du eine völlig andere Shell startest, bekommst du natürlich auch ein völlig anderes Ergebnis ... Mach mal was Martin-MS geschrieben hat, also mit dem richtigen Namen. (Ich wusste doch, das was falsch war bei mir!)
So, Doppelpost um die Notification zu triggern 🙂 @TC
Bin jetzt zuhause, und habs mit einem simplen echo ja
getestet, allerdings in der zsh und mit alacritty. Meine initiale Idee funktioniert wie erwartet. Auch die angepasste Variante mit pgrep
von @Martin-MS funktioniert ohne Probleme, wobei ich diese syntax hier irgendwie lieber mag:
[ "$(pgrep -c 'alacritty')" -lt 2 ] && echo ja
Das gibt beim ersten geöffneten alacritty-Fenster „ja“ aus, und bei jedem weiteren geöffneten Fenster nicht. Statt alacritty
einfach kitty
(und nicht kittie 😃) einsetzen, und statt echo ja
eben das, was du da gern ausführen möchtest.
Noch einfacher wird es nicht gehen.
- Bearbeitet
Ich kenne kitty nicht und hab jetzt auch nicht ganz nachvervolgt was du exakt bewirken willst.
Ich nutze sway und in der config Datei habe ich Zeilen wie diese stehen:
bindsym $mod+e exec 'swaymsg "workspace e̲ditor" && if [ $(pgrep -cx kate) -lt 1 ]; then $(kate) & fi'
Das bewirkt folgendes:
Die Tastenkombination mod+e wechelt zum Fester editor und falls kate noch nicht läuft wird es gestartet und falls es schön läuft dann eben nicht noch ein zweites mal.
- Bearbeitet
Dirk Bin jetzt zuhause, und habs mit einem simplen echo ja getestet, allerdings in der zsh und mit alacritty. Meine initiale Idee funktioniert wie erwartet. Auch die angepasste Variante mit pgrep von @Martin-MS funktioniert ohne Probleme, wobei ich diese syntax hier irgendwie lieber mag:
[ "$(pgrep -c 'alacritty')" -lt 2 ] && echo ja
Das gibt beim ersten geöffneten alacritty-Fenster „ja“ aus, und bei jedem weiteren geöffneten Fenster nicht. Statt alacritty einfach kitty (und nicht kittie 😃) einsetzen, und statt echo ja eben das, was du da gern ausführen möchtest.
Noch einfacher wird es nicht gehen.
ok. ich werde da iwo einen fehler aufgrund mangelnder kompetenz haben. aber ich gebe nicht auf! ich lern das schon noch...
ich poste mal den kompletten inhalt meiner .bahrc
#
# ~/.bashrc
#
# If not running interactively, don't do anything
[[ $- != *i* ]] && return
alias ls='ls --color=auto'
alias grep='grep --color=auto'
PS1='[\u@\h \W]\$ '
[ "$(pgrep -c 'kitty')" -lt 2 ] && fastfetch --load-config examples/7.jsonc --logo /usr/share/fastfetch/presets/examples/fflogo.txt
powerline-daemon -q
POWERLINE_BASH_CONTINUATION=1
POWERLINE_BASH_SELECT=1
. /usr/share/powerline/bindings/bash/powerline.sh
in der kitty.conf habe ich auch keinen shortcut der dazwischen gretscht. neues fenster wird standartmäßig über modifierkey+enter geöffnet.
leider ist fastfetch wieder in jedem fenster
TC map f1 launch sh -c "ls && exec zsh"
leider funktionier das überhaupt nicht. das fenster wird sofort geschlossen, warum auch immer.mit oder ohne anführungszeichen
Weil das Paket zsh
wahrscheinlich nicht installiert ist.
TC nehme ich den auzuführenden befehl weg und starte
map f1 launch sh
kommt leeres fenster mit der anzeige
sh-5.2$
Du musst ja auch die bash
aufrufen, und nicht sh
.
Das eigentliche Problem besteht darin, dass es entweder keine oder nur genau eine Instanz von kitty
gibt, deswegen bringt ein Vergleich gegen den von pgrep
gelieferten Zähler nichts; entweder steht er auf 0
wenn kitty
nicht gestartet wurde, oder auf 1
wenn es ausgeführt wird, weil Jedes weitere Fenster innerhalb desselben Prozesses von kitty
läuft.
Die Abfrage mit -lt 2
führt immer zu Gleichheit (und damit zur Ausführung von fastfetch
), egal ob kitty
läuft oder nicht. ein Vergleich gegen 0
würde fastfetch
innerhalb von kitty
nie ausführen, und ein Vergleich gegen 1
immer. So kommt man also nicht weiter.
Ein möglicher Ansatz wäre, die Anzahl der Fenster für einen Vergleich heranzuziehen, dazu bietet sich die Variable KITTY_WINDOW_ID
an, die mit Öffnen jedes weiteren Fensters inkrementiert wird.
Für die .bashrc
sähe die Modifikation dann so aus:
if [ $(pgrep -c "kitty") == 0 ] ; then fastfetch ; fi
if [ "$KITTY_WINDOW_ID" == 1 ] ; then fastfetch ; fi
Die erste Zeile sorgt dafür, dass fastfetch
in jeder bash
-Session ausgeführt wird, einschränkend aber nur dann, wenn kitty
nicht läuft. Wenn fastfetch
nicht bei Start einer bash
-Session ausgeführt werden soll, kann man auf diese Zeile verzichten. Die zweite Zeile führt fastfetch
nur dann aus, wenn KITTY_WINDOW_ID
den Wert 1
hat, also nur im ersten Fenster, in allen weiteren Fenstern dann nicht mehr.
Der Eintrag in kitty.conf
für die Belegung von F1
müsste dann so aussehen: map f1 launch bash
- Bearbeitet
Martin-MS Du musst ja auch die bash aufrufen, und nicht sh
das war nur als beispiel für den shortcut, weil ich versucht habe das problem über die config zu lösen. ich hatte verpennt bash einzusetzten statt sh
und danke das einem noob wir mir so tapfer weiter helft. ich weis das zu schätzen...
Martin-MS if [ $(pgrep -c "kitty") == 0 ] ; then fastfetch ; fi
if [ "$KITTY_WINDOW_ID" == 1 ] ; then fastfetch ; fi
DAS GEHT!!!!! jippi skippi
und weil mir meine unwissenheit nachträgt werde ich mich jetzt wohl mal (wieder) mit programmierung
beschäftigen.
tausend dank an alle die mir geholfen haben
Man könnte es noch etwas optimieren:
if [ "$KITTY_WINDOW_ID" = "1" ] || [ "$KITTY_WINDOW_ID" = "" ] ; then fastfetch ; fi
Das würde die Modifikation der .bashrc
auf eine Zeile reduzieren und fastfetch
würde bei jedem Start eines bash
-Prozesses wieder ausgeführt, weil die bisherige Bedingung $(pgrep -c "kitty")
entfällt und somit auch bei schon einem laufenden kitty
-Prozess ausgeführt wird.
Somit wird fastfetch
ausgeführt, wenn die Variable KITTY_WINDOW_ID
den Inhalt 1
hätte (erstes kitty
-Fenster) oder unbelegt wäre (bash
-Session).
Apropos gelöst ... Ich war mal so frei 🙂
Dirk Apropos gelöst ... Ich war mal so frei 🙂
vielen Dank