Ich möchte eine Datei direkt durch Anhängen einer Zeile bearbeiten, nur wenn sie noch nicht vorhanden ist, um mein Skript kugelsicher zu machen.
Normalerweise würde ich so etwas machen wie:
cat >> ~/.bashrc <<EOF
export PATH=~/.composer/vendor/bin:\$PATH
EOF
Es ist auch möglich, dies über ansible ( line
+ insertafter=EOF
+ regexp
) zu tun , aber es ist eine andere Geschichte.
In vi / ex könnte ich so etwas machen wie:
ex +'$s@$@\rexport PATH=\~/.composer/vendor/bin:$PATH@' -cwq ~/.bashrc
aber wie überprüfe ich dann im Idealfall, ob die Leitung bereits vorhanden ist (und tue somit nichts), ohne dieselbe Zeile zu wiederholen?
Oder gibt es eine einfachere Möglichkeit, dies im Ex-Editor zu tun?
ex ~/.bashrc -c "if search('export PATH=\~\/.composer\/vendor\/bin:\$PATH')>0 | norm quit | endif | norm Aexport PATH=~/.composer/vendor/bin:$PATH"
export
ein Befehl ist. Der Rest der Zeile ist also ein Shell-Wort, keine Zuweisung. Daher benötigen Sie im Gegensatz zu einer Variablenzuweisung (die nicht verwendet wird export
) doppelte Anführungszeichen, da diese sonst im Leerzeichen unterbrochen wird . Siehe auch So fügen Sie PATH einen Pfad korrekt hinzu .
grep -Fq 'export PATH=~/.composer/vendor/bin:$PATH' ~/.bashrc || ex ...
(oder auchcat
)?