Bash 如何使用变量作为文件路径从服务器执行scp?

Bash 如何使用变量作为文件路径从服务器执行scp?,bash,scp,Bash,Scp,我正在尝试编写一个bash脚本,该脚本(1)在服务器上查找与字符串模式匹配的最新文件,并(2)将该文件从服务器复制到本地。我已经完成了第一部分,但第二部分有困难 我尝试过使用引号、大括号、冒号、硬编码服务器上的根文件夹的所有组合,但都不起作用 file\u name=$(ssh-t)id@server.com“ls-t/path/to/file/on/server/file_name_*|head-1;bash-l”) echo$file_name#这很有效 scpid@server.com:$

我正在尝试编写一个bash脚本,该脚本(1)在服务器上查找与字符串模式匹配的最新文件,并(2)将该文件从服务器复制到本地。我已经完成了第一部分,但第二部分有困难

我尝试过使用引号、大括号、冒号、硬编码服务器上的根文件夹的所有组合,但都不起作用

file\u name=$(ssh-t)id@server.com“ls-t/path/to/file/on/server/file_name_*|head-1;bash-l”)
echo$file_name#这很有效
scpid@server.com:$file_name path/to/local#这不起作用


第2行可以工作,所以我假设第1行可以工作。当我用
file\u name
硬编码将命令键入终端时,我可以毫无问题地运行第3行。当我运行这个脚本时,我得到一个错误,说
没有这样的文件或目录half/of/the/path/to/the/file.csv
基本上是错误消息,没有空格,然后是第2行回音的一半路径。非常感谢您的帮助。

我不明白您为什么使用“ssh-t”和“bash-l”。不需要它们。它们会导致我的测试环境出现问题

也就是说,这种问题很可能是由看不见的角色引起的。要检查是否是这种情况,您可能需要
回显“[$file\u name]”
,以便查看其中的内容

在这种特殊情况下,请看下面我的发现:

   $ file_name=$(ssh -t testbox "ls -t /home/ec2-user/hello* | head -1")
   Connection to xxx closed. 

   $ echo "[$file_name]"
   ]/home/ec2-user/hello  # <--- the expected output is [/home/ec2-user/hello]

   $ scp testbox:$file_name ./
   : No such file or directory

$file\u name中有空格吗?没有,有两个破折号。你可以发布$file\u name的实际值吗?也许可以更改一些密语来保护你的隐私?基本上是
/path/to/my\u file/on-the-the-the-u-server/name/of-file\u 201901020.csv
$ file_name=$(ssh testbox  "ls -t /home/ec2-user/hello* | head -1")

$ echo "[$file_name]"
[/home/ec2-user/hello]

$ scp testbox:$file_name ./
hello                                    100%    0     0.0KB/s   00:00