Bash echo >> ... nur, wenn noch nicht vorhanden?

CyborgBeta

Captain
Registriert
Jan. 2021
Beiträge
3.497
Bash:
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo >> /home/benutzername/.bashrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/benutzername/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

Wie kann man verhindern, dass nach mehrmaligem Ausführen des Scripts Zeile 3 eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)" mehrmals in die .bashrc einträgt?

Oder anders, wie kann diese Zeile nur hinzugefügt werden, wenn sie in der Datei noch nicht vorhanden ist?
 
Und wie dann verknüpfen? Grep hat ja keinen exit code ...
 
Eventuell bin ich ja einfach zu doof, aber

Bash:
#!/bin/bash
set -e
NONINTERACTIVE=1 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo >> /home/benutzername/.bashrc
grep -q 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' /home/benutzername/.bashrc || echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/benutzername/.bashrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"

tut nicht das, was es soll.
Ergänzung ()

Ach so, ich darf das -q nicht verwenden. Danke, gelöst.
 
Zuletzt bearbeitet:
-q sollte am exit code nicht ändern

sonderzeichen können probleme machen, in dem beispiel, vielleicht zur sicherheit, grep -F
 
ansonsten gäbs auch IF EXIST
 
kieleich schrieb:
-q sollte am exit code nicht ändern
Leider nicht

1000011973.jpg
 
welchen error haste denn in dem zusammenhang??

Code:
$ grep -q gehtnichgibtnich gehtnichgibtnich; echo $?
grep: gehtnichgibtnich: No such file or directory
2
$ grep gehtnichgibtnich gehtnichgibtnich; echo $?
grep: gehtnichgibtnich: No such file or directory
2
$ grep -q nixgefunden .bashrc; echo $?
1
$ grep nixgefunden .bashrc; echo $?
1
$ grep export .bashrc; echo $?
export EDITOR=/usr/bin/nano
0
$ grep -q export .bashrc; echo $?
0

so is das normalerweis keine änderung am exit code -q oder nicht -q
 
um das if konstrukt zu sparen. das in deinem beispiel gar nicht funktioniert

man kann nach dem || gerne ein zeilenumbruch machen um es lesbarer zu gestalten

oder gleich if grep ...
 
wenns unsinn ist, was editierst du dann

egal ich bin raus, mach den quatsch alleine

generell wirst du, in shell scripten in der wildnis, konstrukte mit || öfter sehen als versuchen $? in eine variable zu stecken und dann noch mal abzufragen, ist einfach, viel fehlerbehafteter

preise für schönen stil gibts bei shell scripten eh nicht das wird alles hin geklatscht fertig. soll ein einfaches problem lösen und keine preise gewinnen
 
up.whatever schrieb:
Nur weil du den Unterschied zwischen einer Pipe und einem logischen "oder" nicht kennst, ist das noch lange kein Unsinn.
Stimmt, Du hast recht, es ist ja ein Oder und kein Pipe. Sorry, muß doch erst mal nen Kaffee holen, meine Augen sind noch zu schwach...
 
grep '<abc>' <file> || echo <...> funktioniert (nur eben nicht silent).

Bin kein Bash/Gnu Experte, aber man sollte möglichst viel ohne if then else fi machen (wenn möglich).
 
Wieso? If else ist meiner Meinung nach schöner zu lesen als ein || und man versteht es gleich.
 
Ich mach das ja beruflich und muß fast jede Woche sowas lesen und reviewen, ich habe bisher nirgends das so gesehen (außer in den if Abfragen mit if [ a || b ] ).
Da würde ich glatt mal wetten, daß dann im Code der CPU dann eh wieder nur ein if daraus gemacht wird, wenn man nur || verwendet.

Und für einen 2-10 Zeiler ist kompakt ok, bei großen Scipten würde ich es eher vermeiden. Ich kenne auch keinen Kollegen in all den Jahre, der das mal so verwendet hätte.
 
  • Gefällt mir
Reaktionen: CyborgBeta
nutrix schrieb:
Da würde ich glatt mal wetten, daß dann im Code der CPU dann eh wieder nur ein if daraus gemacht wird, wenn man nur || verwendet.
Ich denke, du verwechselst grad interpretieren und kompilieren von Code. Ich habe jedenfalls noch nie gehört, dass sich jemand fragt, wie sich interpretierter Code auf CPU Instruktionen abbildet.

Bash ist schon schlimm genug und man sollte generell nicht auf Kompaktheit, sondern Leserlichkeit optimieren (geht natürlich auch teilweise einher miteinander).

kieleich schrieb:
preise für schönen stil gibts bei shell scripten eh nicht das wird alles hin geklatscht fertig. soll ein einfaches problem lösen und keine preise gewinnen
Finde ich nicht sinnvoll die Einstellung. Das ist auch Code und schlechter Script-Code erzeugt später die selben Probleme wie schlechter Python-Code oder C++-Code.

Mir ist generell aber auch ein Rätsel, wieso man überhaupt freiwillig Bash verwendet anstelle einer modernen, weniger qualvollen Sprache.
 
Zurück
Oben