魚関数の引数を引用して連結する

魚関数の引数を引用して連結する

VMを破壊したりプロビジョニングしたりし続けるので、sshは頻繁にエラーを出します。NASTY。 んー...

とにかく、私は、次のように表示された行で問題のあるキーを排除する fish 関数を作成しましたsed

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

しかし、自分自身を(注入する)ことから少し保護するために、コマンドを引用符で囲んでおきたいと思います。 で囲むと''、 は置き換えられません$argv。 また、最初の引数 だけを取得したいのです[0]が、 を追加すると、これも展開されません。

答え1

~/.ssh/config継続的に再作成する VM のエントリを作成します。以下に例を示します。つまり、~/.ssh/known_hostsファイルをハッキングし続ける必要はありません。

Host test-vm-1
    StrictHostKeyChecking no

答え2

これを '' で囲むと、$argv は置き換えられません。

必要なのは二重引用符、つまり です"$argv"。これは他のシェルの場合と同じです。

また、最初の引数 [0] だけを取得したいのですが、それを追加すると展開されません。

fish では、リストの最初の要素のインデックスは 1 なので、 が必要になります$argv[1]

一緒にそれは意味する

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

もちろん、複数の引数が与えられた場合にエラー処理を追加することもできます。

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

関連情報