Verwenden find
pgrep --inverse -t \
"$(find /dev/ -type c -regex '.*tty[0-9]+' -printf '%f ')"
find
Der Befehl wird durch command substitution aufgerufen. Da die Befehlsersetzung in doppelte Anführungszeichen eingeschlossen ist, wird die Ausgabe als einziges Wort an preg
übergeben.
Optionen:
-type c
nur Zeichen spezielle Dateien wählt (mit stat -c '%F' /dev/tty*
geprüft werden);
-regex '.*tty[0-9]+'
wählt nur Dateien aus, die dem regulären Ausdruck entsprechen, also alles (.*
), gefolgt von einer oder mehreren (+
) Ziffern ([0-9]
);
-printf '%f '
druckt den Dateinamen gefolgt von einem Leerzeichen (find
druckt standardmäßig einen nachgestellten Zeilenvorschub). Da die Option -t
eine Liste von TTY-Namen akzeptiert (ohne das Präfix "/dev/"
), getrennt durch Kommas oder Leerzeichen, können wir entweder Leerzeichen oder Komma hinter dem Dateinamen (%f
) einfügen.
Verwenden von Dateinamen Erweiterungs
cd /dev
ttys=(tty[0-9][0-9]?[0-9]?)
cd - >/dev/null
pgrep -a --inverse -t "${ttys[*]}"
tty[0-9][0-9]?[0-9]?
wird tty
durch eine, zwei oder drei Ziffern, dann erweitert (?
macht das vorhergehende Muster optional).
ttys=(words)
erstellt ein Array aus dem IFS
-getrennte Wörter (IFS
ist auch bekannt als "Eingabefeld Trennzeichen").
"${ttys[*]}"
wird zu einem einzelnen Wort erweitert, das aus den Array-Elementen besteht, die durch das erste Zeichen von IFS
getrennt sind (Standard ist das Leerzeichen).