在bash脚本

时间:2016-08-31 20:12:38

标签: linux bash scp

我有一个bash脚本,我在其中搜索服务器以获取特定文件名,然后使用scp将该文件从远程服务器复制到本地计算机。当文件名是硬编码时(在最终脚本中显然不可能),scp命令工作正常,但在通过变量访问文件名时失败。 我使用以下代码获取文件名:

for file in `ssh -t -t user@host 'cd /path/to/files && ls -t rsync* | head -1'`
do 
    FILENAME=$file
done

echo $filename工作正常并回显文件的名称,在本例中为rsync.2016.08.31-08.42.19.log。请注意,文件名中没有空格或不常用的字符,因此这似乎不是问题。文件名将始终采用此格式(只有日期和时间会发生变化,这就是为什么我对使用不推荐的解析ls命令的方法感到满意。)

当我尝试使用以下命令时:

scp user@host:/path/to/files/$FILENAME .

我收到以下错误:

: No such file or directorync.2016.08.31-08.42.19.log

请注意,错误消息将掩盖到文件名中,从而删除前三个字母。有趣的是,如果我从命令中删除/ path / to / files /,我得到:

: No such file or directory.19.log

(即变量名称中缺少17个左右的字母)。我尝试在for循环中使用scp(包括在循环中使用$ file变量而不是将其分配给$ FILENAME)和for循环之外。我尝试创建一个包含完整路径的变量,然后使用它。我尝试在变量名称周围加上括号。我尝试在本地机器上使用不同的路径,包括完整路径和相对路径。我试过在$ FILENAME附近加上双引号和单引号。这一切都会导致同样的错误。似乎唯一有用的是将文件名硬编码到命令中。关于这个变量的东西似乎是个问题,但是在我的大脑和在线资源耗尽之后,我感到很茫然。

0 个答案:

没有答案