Citando e concatenando um argumento de função de peixe

2

Eu continuo destruindo e provisionando VMs, então o ssh frequentemente reclama que estou sendo NASTY . Mmmm ...

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

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

mas eu gostaria de manter o comando citado para me proteger contra (injetar) um pouco. Quando eu envolvê-lo em '' , ele não substitui $argv . Além disso, eu prefiro apenas pegar o primeiro argumento [0] , mas quando eu adiciono que ele também não se expande.

    
por Nick T 02.11.2016 / 22:49

2 respostas

2

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

Host test-vm-1
    StrictHostKeyChecking no
    
por 02.11.2016 / 23:28
1

When I wrap it in '', it then doesn't replace $argv.

O que você deseja é aspas duplas, ou seja, "$argv" . Isso é o mesmo que em outros shells.

Also, I'd prefer to just grab the first argument [0], but when I add that it also doesn't expand.

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 tiver sido fornecido com

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

Tags