2017-02-03 21 views
-1

Ich bin eine unendliche Schleife in bash zu schreiben:

while : 
do 
    (whatever) 
done 

Allerdings, wenn ich versuche, den "done" -Linie auf diese Weise einfügen

vi -c "$s/$/\rdone\r/g" -c "w!" -c "q!" 

Was ich erhalte, ist, dass „$ s/$/\ rdone \ r/g "ist kein Editor-Befehl. Allerdings funktioniert das gut, während ich auf gvim bin.

Hat jemand eine Idee, warum das passiert? Mache ich etwas falsch?

+0

Was genau sagt Vim Ihnen ist nicht ein Editor-Befehl? –

+1

Vim scheint eine ungewöhnliche Wahl für diese Aufgabe. Warum nicht sed oder awk? –

Antwort

0

vi ist ein altes Werkzeug. Ich habe keine Kopie davon, daher kann ich Ihren Befehl nicht in vi testen, aber Ihr Befehl funktioniert gut für mich, wenn ich vim verwende. Versuchen Sie stattdessen tun:

vim file -c "$s/$/\rdone\r/g" -c "w!" -c "q!" 

Auch als eine Randnotiz, die w und q Befehle für kombiniert werden können

vim file -c "$s/$/\rdone\r/g" -c "wq!" 

und der Globals-Flag (/g) ist nicht mehr benötigt, da $ nur einmal bieten kann an der Leitung.

vim file -c "$s/$/\rdone\r" -c "wq!" 

Das sollte ein bisschen effizienter sein.

+1

Funktioniert das? –

+0

@JoshLee Ah, ich sehe das Problem jetzt. Dies funktionierte gut für mich, weil ich es auf Windows versuchte, nicht in bash. Ich wusste nicht, dass bash Probleme mit doppelten Anführungszeichen hatte. – DJMcMayhem

3

gerade doppelte Anführungszeichen durch einzelne ersetzen:

vim yourfile -c '$s/$/\rdone\r' -c 'wq!' 

doppelte Anführungszeichen durch bash zuerst analysiert werden, und es ist vor allem ein Problem mit den $ Zeichen.