Bash 为scp-i使用变量不起作用,但传递文件名起作用

Bash 为scp-i使用变量不起作用,但传递文件名起作用,bash,jenkins,Bash,Jenkins,我正在使用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进行文件传输,但是,当我使用变量名指定密钥文件时,出现以下错误:

警告:标识文件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

感谢约翰·库格曼提供的线索。变量的末尾有一个回车符。为了解决这个问题,我不得不删除它。我是用以下方法做的:

CLEANED_KEY=${SSH_KEY_PATH//[$'\t\r\n ']}
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"

声明-p SSH\u KEY\u路径显示什么?有什么特殊字符隐藏在里面吗?好的,在我执行命令之后,变量中似乎有一个空格和新行。以下是输出:declare-x SSH\u KEY\u PATH=“RPD-API.pem”@JohnKugelman感谢您的建议,我在删除新行后成功地修复了它。我将在这里发布解决方案。