Bash 如何使用变量作为文件路径从服务器执行scp?
我正在尝试编写一个bash脚本,该脚本(1)在服务器上查找与字符串模式匹配的最新文件,并(2)将该文件从服务器复制到本地。我已经完成了第一部分,但第二部分有困难 我尝试过使用引号、大括号、冒号、硬编码服务器上的根文件夹的所有组合,但都不起作用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:$
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