grep ist nicht mein Freund

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

geimist

Benutzer
Sehr erfahren
Maintainer
Add-on Developer
Registriert
04. Jan. 2012
Beiträge
5.966
Reaktionspunkte
1.722
Punkte
234
Hallo Zusammen,

grep kann manchmal (aus meiner Sicht) eine ganz schöne Mimose sein. Was mache ich falsch?
Rich (BBCode):
admin@DS:~$ uname -a
Linux DS 3.10.77 #8451 SMP Wed Jan 4 00:37:28 CST 2017 x86_64 GNU/Linux synology_braswell_716+
admin@DS:~$

Möchte ich mit if das Vorhandensein von "braswell" testen, wird wieder geschimpft. Was mache ich falsch?:
Rich (BBCode):
admin@DS:~$ if [ `uname -a | grep braswell ` ] ; then echo "gefunden";fi
-sh: [: too many arguments
admin@DS:~$

Übergebe ich uname -a direkt via Pipe an grep, wird der Treffer in der Konsole schön rot angemalt:
Rich (BBCode):
admin@DS:~$ uname -a | grep braswell
Linux DS 3.10.77 #8451 SMP Wed Jan 4 00:37:28 CST 2017 x86_64 GNU/Linux synology_braswell_716+
admin@DS:~$

Oder habe ich ein anderes grundlegendes Problem?
 
mit einer einfachen [ können Variablen verglichen werden. Mit doppelter [[ können auch Muster verglichen werden.
sprich, du musst wenn du das so wie oben direkt auf der Bash ausführen willst, mit den doppelten [[ arbeiten.

Rich (BBCode):
if [[ `uname -a | grep braswell ` ]] ; then echo "gefunden";fi
 
Alternativ die Option -c beim grep probieren, das läuft dann auch auf der sh bzw. ash. ;)
 
Oder alternativ-alternativ mit grep -Eo (aber das ist gefrickel^^) ;)

edit: äh, nur grep -o
 
Da hier nur auf den Rückgabestatus des letzten Kommandos getestet werden muss und nicht auf die Variable geht es auch ganz ohne Brackets und Backticks
if uname -a | grep braswell >/dev/null ; then echo "gefunden";fi
 
Bei dieser Zeile

Rich (BBCode):
if uname -a | grep braswell ; then echo "gefunden";fi

bekomme ich auf der ash die Ausgabe des uname Kommandos gefolgt von "gefunden" in einer neuen Zeile ...
 
mit >/dev/null nicht mehr
 
Hehehe, stimmt - sehr schön.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat