Citando e concatenando um argumento de função fish

Citando e concatenando um argumento de função fish

Eu continuo destruindo e provisionando VMs, então o ssh reclama frequentemente que estou sendoNASTY. Hummm...

De qualquer forma, escrevi uma função fish para banir a chave ofensiva na linha que ela me diz sed:

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

mas gostaria de manter o comando citado para me proteger um pouco contra (injeção). Quando eu o envolvo '', ele não substitui $argv. Além disso, prefiro pegar apenas o primeiro argumento [0], mas quando acrescento isso ele também não se expande.

Responder1

Crie uma ~/.ssh/configentrada para as VMs que você está recriando continuamente. Exemplo abaixo. Significa que você não precisa continuar hackeando seu ~/.ssh/known_hostsarquivo.

Host test-vm-1
    StrictHostKeyChecking no

Responder2

Quando eu envolvo em '', ele não substitui $ argv.

O que você quer são aspas duplas, ou seja "$argv", . É o mesmo que em outros shells.

Além disso, prefiro pegar apenas o primeiro argumento [0], mas quando acrescento isso ele também não se expande.

Em fish, o primeiro elemento de uma lista tem o índice 1, então você quer $argv[1].

Juntos isso significa

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

É claro que você também pode adicionar tratamento de erros se mais de um argumento for fornecido com

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

informação relacionada