Кавычки и конкатенация аргумента функции fish

Кавычки и конкатенация аргумента функции fish

Я продолжаю уничтожать и создавать виртуальные машины, поэтому ssh часто жалуется, что яNASTY. Мммм...

В любом случае, я написал функцию fish, чтобы изгнать проблемную клавишу в строке, о которой она мне сообщает sed:

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

но я бы хотел сохранить команду в кавычках, чтобы немного защитить себя от (инъекции). Когда я оборачиваю ее в '', она не заменяет $argv. Кроме того, я бы предпочел просто захватить первый аргумент [0], но когда я добавляю его, он также не расширяется.

решение1

Создайте ~/.ssh/configзапись для виртуальных машин, которые вы постоянно воссоздаете. Пример ниже. Это значит, что вам не придется постоянно взламывать свой ~/.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

Связанный контент