bash script

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
The Hit-Man
Beiträge: 2222
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

bash script

Beitrag von The Hit-Man » 07.07.2020 17:25:53

ich habe mir ein script geschrieben, der in einer datei an einer bestimmten stelle, in einer datei, ein kommentar zeichen ( # ) setzt und auch wieder weg nimmt. jetzt habe ich das gefühl, das das script nicht wirklich sauber läuft. ich habe das gefühl, das der 'sed' befehl nicht richtig läuft.
würde vielleicht einer kurz drüber schauen?

Code: Alles auswählen

#!/usr/bin/bash

RETROARCH=retroarch
KODI=kodi
CONF=/boot/config.txt
ENABLE3D="dtoverlay=vc4-kms-v3d"
DISABLE3D="#dtoverlay=vc4-kms-v3d"
DRI=/dev/dri

if [ `cat "$CONF" | grep "$ENABLE3D"` = "$ENABLE3D" ]; then
    echo "PI in /boot/config.txt - DRI disabled"
    echo "next boot KODI"
    sed -i '/dtoverlay=vc4-kms-v3d/s/^/#/g' "$CONF"

else
    echo "PI in /boot/config.txt - DRI enabled"
    sed -i '/dtoverlay=vc4-kms-v3d/s/^#//g' "$CONF"
    echo "next boot RETROARCH"
fi

Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

JTH
Moderator
Beiträge: 3077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: bash script

Beitrag von JTH » 07.07.2020 17:47:14

The Hit-Man hat geschrieben: ↑ zum Beitrag ↑
07.07.2020 17:25:53
jetzt habe ich das gefühl, das das script nicht wirklich sauber läuft. ich habe das gefühl, das der 'sed' befehl nicht richtig läuft.
Das ist keine hilfreiche Fehlerbschreibung. Was genau passiert bei dir oder was passiert nicht?

Kurz ausprobiert, wird bei mir – soweit nachstellbar – mit jedem Aufruf die # vor der Zeile mit Inhalt dtoverlay=vc4-kms-v3d eingefügt bzw. entfernt.


Anregung: Diese Zeile

Code: Alles auswählen

if [ `cat "$CONF" | grep "$ENABLE3D"` = "$ENABLE3D" ]; then
kann man allerdings verkürzen. grep kann selbst direkt in Dateien suchen, kein Grund für cat:

Code: Alles auswählen

if [ `grep "$ENABLE3D" "$CONF"` = "$ENABLE3D" ]; then
Außerdem kann grep auch komplette Zeilen vergleichen, der extra Vergleich ist damit überflüssig. Man kann dann direkt den Exitcode von grep im if benutzen:

Code: Alles auswählen

if grep --line-regexp --quiet "$ENABLE3D" "$CONF"; then
Äquivalente Kurzform:

Code: Alles auswählen

if grep -qx "$ENABLE3D" "$CONF"; then
Manchmal bekannt als Just (another) Terminal Hacker.

Benutzeravatar
The Hit-Man
Beiträge: 2222
Registriert: 21.11.2004 17:01:56
Wohnort: Menden ( Sauerland )
Kontaktdaten:

Re: bash script

Beitrag von The Hit-Man » 07.07.2020 17:59:22

Das ist keine hilfreiche Fehlerbschreibung. Was genau passiert bei dir oder was passiert nicht?
ja, hatte immer das gefühl, das der kommentar nicht richtig gesetzt wird und gelöscht wird ... es geht da drum ( falls du es wissen magst ). das script ist ein systemd-dienst den ich geschrieben hatte und hat den zweck wenn der raspberry aus/eingeschaltet wird, das die 3D beschleunigung ein und aus geschaltet wird und je nach dem ob sie an ist, wird retroarch gestartet. ist sie aus, dann wird kodi gestartet. das problem ist eben, das man kodi mit DRI ( auf dem raspberry ), nicht starten kann. und ohne DRI, kein retroarch starten kann.
ich wollte halt nicht immer erst per ssh auf dem pi gehen und per hand den kommentar setzen oder raus nehmen.
da ist besser dann einfach den pi, neu starten, sprich strom aus und wieder an.

aber wenn du sagst, es scheint bei dir auch ohne fehler zu laufen, dann laß ich es besser so wie es ist ...
Wer HTML postet oder gepostetes HTML quotet oder sich gepostetes oder
gequotetes HTML beschafft, um es in Verkehr zu bringen, wird geplonkt.

damals windows, früher ubuntu, danach debian, heute arch-linux ;)

tobo
Beiträge: 2336
Registriert: 10.12.2008 10:51:41

Re: bash script

Beitrag von tobo » 07.07.2020 18:44:17

Was das sed angeht, da ist das abschließende g in beiden Fällen überflüssig. Zudem, falls das überhaupt ein Problem ist, würde es bei allen Zeilen mit einem "dtoverlay=vc4-kms-v3d" greifen und nicht nur beim ersten Treffer.

Antworten