2016-12-11 2 views

Antwort

0

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).

Verwandte Themen