Использование переменной для scp -i не работает, но передача имени файла работает

#bash #jenkins

#bash #дженкинс

Вопрос:

Я использую SCP для передачи файла, однако, когда я указываю ключевой файл, используя имя переменной, я получаю следующую ошибку:

Предупреждение: Файл идентификации RPD-API.pem недоступен: такого файла или каталога нет.

Команда, которую я использую, это:

 scp -i $SSH_KEY_PATH -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/test.war root@$MQ_IP:/home/test/ROOT.war
  

Я новичок в bash, но я чувствую, что это что-то простое, и мне просто не хватает знакомства. Когда я жестко кодирую имя ключевого файла, проблем не возникает. Например:

 scp -i RPD-API.pem -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/test.war root@$MQ_IP:/home/test/ROOT.war
  

Когда я печатаю значение переменной, оно выглядит правильно:

 $ echo $SSH_KEY_PATH
RPD-API.pem
  

Комментарии:

1. Что declare -p SSH_KEY_PATH показывает? Там скрыты какие-либо специальные символы?

2. Хорошо, после того, как я выполнил команду, кажется, что в переменной есть пробел и новая строка. следующий результат: declare -x SSH_KEY_PATH=»RPD-API.pem»

3. @JohnKugelman спасибо за совет, мне удалось исправить это после удаления новой строки. Я опубликую решение здесь.

Ответ №1:

Спасибо Джону Кугельману за подсказку. В конце переменной был возврат каретки. Чтобы устранить проблему, мне пришлось ее удалить. Я сделал это, используя следующий метод:

 CLEANED_KEY=${SSH_KEY_PATH//[$'trn ']}
scp -i $CLEANED_KEY -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no $WORKSPACE/target/razer-pay-backend-mq.war root@$MQ_IP:/home/jenkins/ROOT.war
  

Разница в выводе заключается в следующем:

Перед очисткой

 declare -x SSH_KEY_PATH="RPD-API.pem
"
  

После очистки

 declare -- CLEANED_KEY="RPD-API.pem"