Citar y concatenar un argumento de función de pez

Citar y concatenar un argumento de función de pez

Sigo destruyendo y aprovisionando máquinas virtuales, por lo que ssh frecuentemente se queja de que estoy siendoNASTY. Mmmm...

De todos modos, escribí una función fish para desterrar la clave ofensiva en la línea que me dice sed:

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

pero me gustaría mantener el comando citado para protegerme contra (inyectarme) un poco. Cuando lo envuelvo '', no lo reemplaza $argv. Además, preferiría simplemente tomar el primer argumento [0], pero cuando lo agrego tampoco se expande.

Respuesta1

Cree una ~/.ssh/configentrada para las máquinas virtuales que recrea continuamente. Ejemplo a continuación. Significa que no tienes que seguir pirateando tu ~/.ssh/known_hostsarchivo.

Host test-vm-1
    StrictHostKeyChecking no

Respuesta2

Cuando lo envuelvo en '', no reemplaza a $argv.

Lo que quieres son comillas dobles, es decir "$argv". Esto es lo mismo que en otros caparazones.

Además, preferiría simplemente tomar el primer argumento [0], pero cuando lo agrego tampoco se expande.

En fish, el primer elemento de una lista tiene el índice 1, por lo que desea $argv[1].

Juntos eso significa

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

Por supuesto, también podría agregar manejo de errores si se ha dado más de un argumento con

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

información relacionada