Shell kriterium greift nicht richtig
Liebe Grüße in die Runde ....,
ich habe folgende Kontrolle in einem Bash-Script
Damit möchte ich erreichen, dass im folgenden nur Pods bearbeitet werden, die mit "moodle-" beginnen. Wichtig ist das "-"-Zeichen nach moodle.
Das Script prüft bearbeitet neben
so wie es sein soll aber auch pods die so aussehen
Warum ist das so bzw. was mache ich oben in der Abfrage falsch?
ich habe folgende Kontrolle in einem Bash-Script
if ! kubectl get pods -n "$namespace" | grep -E "moodle-" >/dev/null; then
Damit möchte ich erreichen, dass im folgenden nur Pods bearbeitet werden, die mit "moodle-" beginnen. Wichtig ist das "-"-Zeichen nach moodle.
Das Script prüft bearbeitet neben
moodle-7fb6
moodlecron-796c6d
Warum ist das so bzw. was mache ich oben in der Abfrage falsch?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 81791772269
Url: https://administrator.de/contentid/81791772269
Ausgedruckt am: 21.11.2024 um 18:11 Uhr
12 Kommentare
Neuester Kommentar
War auch mein erster Gedanke, allerdings ist das - kein besonderes Zeichen für Regex. Und eigentlich klappt es ja wie es soll
Das Problem liegt denke ich daran, dass evaluiert wird ob kubectl get pods erfolgreich war, und das reicht dann schon um die gesamte expression true zurückgeben zu lassen
man bräuchte etwas mehr vom script um effektiver helfen zu können. Sieht aus als müsste das "if" vorne weg.
Klappen sollte:
Sollte eine liste der entsprechenden Pods ausgeben.
user@PC:~$ echo "moodlecasd-asd" | grep -E "moodle-"
user@PC:~$ echo "moodle-asd" | grep -E "moodle-"
moodle-asd
Das Problem liegt denke ich daran, dass evaluiert wird ob kubectl get pods erfolgreich war, und das reicht dann schon um die gesamte expression true zurückgeben zu lassen
man bräuchte etwas mehr vom script um effektiver helfen zu können. Sieht aus als müsste das "if" vorne weg.
Klappen sollte:
kubectl get pods -n "$namespace" | grep "moodle-"
Zitat von @d.jaeger:
ich habe folgende Kontrolle in einem Bash-Script
Wieso machst du dann ein Ausrufezeichen vor den Ausdruck um das Ergebnis des Ausdrucks zu negieren? Du willst ja gerade verarbeiten wenn das Ergebnis von grep erfolgreich ist und nicht wenn der Ausdruck nicht vorkommt... 🙃ich habe folgende Kontrolle in einem Bash-Script
if ! kubectl get pods -n "$namespace" | grep -E "moodle-" >/dev/null; then
result=$(kubectl get pods -n "$namespace" | grep '^moodle-')
if [[ -n "$result" ]]; then
echo -e "Pods:\n\n$result"
else
echo "Keine passenden pods gefunden!"
fi
Gruß
s.o. da stehts doch.
Zitat von @d.jaeger:
Ich habe das so, wie von Dir vorgeschlagen, umgebaut ... es führt leider zu genau dem gleichen Effekt.
Ich habe das so, wie von Dir vorgeschlagen, umgebaut ... es führt leider zu genau dem gleichen Effekt.
Kann ich nicht bestätigen, funktioniert hier wie gewünscht. poste doch bitte mal die Ausgabe von
kubectl get pods -n "xxxxxxxxxxxxxxx" -o name
Das sollte die reinen Namen der pods ganz am Anfang der Zeilen auflisten.
Also etwa so
moodle-123323234
moodle-54546456546
whatever-sdfdafsdfsdf
moodlecasd-asd
....
..
.
Und das hier dann nur die Zeilen die mit moodle- beginnen
kubectl get pods -n "xxxxxxxxxxxxxxx" -o name | grep '^moodle-'
Ausgabe ist dann
moodle-123323234
moodle-54546456546
Wenn bei dir also die Ausgabe des ersten Befehls anders ist als bei uns müssen wir den Grep an deine Ausgabe anpassen.
Lies doch bitte meine Frage nochmal in Ruhe durch! So kommen wir hier nicht weiter wenn du immer nur das machst was du willst aber nicht das was wir uns von dir erbitten zu tun...
Und was bringt folgendes als Ausgabe ?
Bitte in Codetags posten kein Bild!!
Ansonsten eben mal ein
kubectl get pods -n "xxxxxxxxxxxxxxx"
Ansonsten eben mal ein
result=$(kubectl get pods -n "$namespace" | grep -E "\s+moodle-")
if [[ -n "$result" ]]; then
echo -e "Pods:\n\n$result"
else
echo "Keine passenden pods gefunden!"
fi
Serie: bash
Shell kriterium greift nicht richtig12