我正在尝试将带空格的文件名传递给将从 sFTP 服务器下载传递的文件名的脚本。我在识别脚本时遇到问题,解析后是一个文件名而不是两个单词。
export tloc=/path/to/target
export usr=username
export svr=host.name.com
export pwd=pass1234
export sloc=/path/to/source
export file="test file_12345.zip"
#-- Perform download of file specified using passed paramters.
sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"$file" $tloc
据我所知,当脚本执行时,它会将引号中包含的单词解析为一个单词,然后删除引号。我在这里错过了什么?在其他语言中,我已经能够嵌套引号或使用一些其他语法来使最终结果如下所示。
sshpass -p pass1234 sftp -o StrictHostKeyChecking=no usernamehost.name.com:/path/to/source/"test file_12345.zip" /path/to/target
如有任何帮助,我们将不胜感激。
最佳答案
那是由于 sftp 的错误功能(错误?)。您在命令行上传递的文件名按原样有效地提供给 sftp 的交互式“get”命令,但 get 命令在空格处拆分并使用空格后的部分作为目标,忽略 $tloc 命令行参数。 你需要一个额外的引用级别来让它做你想做的事:
sshpass -p $pwd sftp -o StrictHostKeyChecking=no $usr@$svr:$sloc/"\"$file\"" $tloc
关于linux - BASH - 传递给 sFTP 的带空格的文件名无法正确解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38465509/