Zitieren und Verketten eines Fish-Funktionsarguments

Zitieren und Verketten eines Fish-Funktionsarguments

Ich zerstöre und provisioniere ständig VMs, daher beschwert sich ssh häufig, dass ichNASTY. Mmmm...

Wie dem auch sei, ich habe eine Fish-Funktion geschrieben, um die fehlerhafte Taste aus der Zeile zu entfernen, die sie mir mit folgendem Hinweis anzeigt sed:

function forgethost
   sed -i.bak {$argv}d ~/.ssh/known_hosts
end

aber ich möchte den Befehl in Anführungszeichen halten, um mich ein wenig davor zu schützen, mich selbst einzufügen. Wenn ich ihn in einschließe '', ersetzt er nicht $argv. Außerdem würde ich es vorziehen, nur das erste Argument zu erfassen [0], aber wenn ich das hinzufüge, wird es auch nicht erweitert.

Antwort1

Erstellen Sie einen Eintrag für die VMs, die Sie ständig neu erstellen. Beispiel unten. Bedeutet, dass Sie Ihre Datei ~/.ssh/confignicht ständig hacken müssen .~/.ssh/known_hosts

Host test-vm-1
    StrictHostKeyChecking no

Antwort2

Wenn ich es in „“ einschließe, ersetzt es $argv nicht.

Sie möchten doppelte Anführungszeichen, also "$argv". Dies ist dasselbe wie in anderen Shells.

Außerdem würde ich es vorziehen, nur das erste Argument [0] zu nehmen, aber wenn ich das hinzufüge, wird es auch nicht erweitert.

In Fish hat das erste Element einer Liste den Index 1, Sie möchten also $argv[1].

Zusammen bedeutet das

function forgethost
   sed -i.bak "$argv[1]"d ~/.ssh/known_hosts
end

Natürlich können Sie auch eine Fehlerbehandlung hinzufügen, wenn mehr als ein Argument angegeben wurde mit

if set -q argv[2] # yes, no $
    echo "This only accepts one argument" >&2
    return 1
endt

verwandte Informationen