我正在尝试编写一个bash脚本,该脚本(1)在服务器上找到与字符串模式匹配的最新文件,并且(2)将文件从服务器复制到本地。我已经完成了第一部分,但是第二部分却遇到了麻烦。
我已经尝试了使用引号,花括号,转义冒号,对服务器上的根文件夹进行硬编码的所有组合,但是这些都不起作用。
file_name=$(ssh -t id@server.com "ls -t /path/to/file/on/server/file_name_* | head -1; bash -l")
echo $file_name #this works
scp id@server.com:$file_name path/to/local #this does not work
第2行有效,所以我认为第1行有效。当我使用硬编码的file_name
到终端中键入命令时,我可以顺利运行第3行。运行此脚本时,出现错误消息No such file or directoryhalf/of/the/path/to/the/file.csv
,基本上是错误消息,没有空格,然后是第2行中回显的一半路径。
答案 0 :(得分:2)
不明白为什么要使用“ ssh -t”和“ bash -l”。不需要它们。它们会在我的测试环境中引起问题。
也就是说,这类问题很可能是由看不见的字符引起的。要检查是否存在这种情况,您可能需要echo "[$file_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
相比之下,没有ssh
的{{1}}给了我们预期的结果:
-t