脚本中的bash scp不会在变量插值中看到文件

时间:2014-10-24 04:20:38

标签: bash variables scp

当我运行此脚本(下面列出)

时,我继续这样做
casper@foo0170pap:/home/data$ ./change_while
20141023
gzip: tr_mmet.20141023.csv.gz already exists; do you wish to overwrite (y or n)? y
: No such file or directory
gzip: tr_mmstk.20141023.csv.gz already exists; do you wish to overwrite (y or n)? y
: No such file or directory

我使用了set x,我尝试在我试过的$ transfer_zip周围加上引号 围绕它的括号,我试过了两个。 scp看不到可变的

casper@foo0170pap:/home/data$ ./change_while
++ /bin/date +%Y%m%d
+ today=20141023
+ echo 20141023
20141023
+ for i in tr_mmet.csv tr_mmstk.csv
++ printf tr_mmet
+ cut_suffix=tr_mmet
+ cp -p tr_mmet.csv tr_mmet.20141023.csv
+ sleep 2
++ gzip tr_mmet.20141023.csv
gzip: tr_mmet.20141023.csv.gz already exists; do you wish to overwrite (y or n)? y
+ transfer_zip=
+ scp -r -p '' tr_writer@tr_report.casper_bank.com:/data/Dropbox
: No such file or directory
+ sleep 2

这是脚本 - 一切正常但scp部分。

#!/bin/bash
set -x
today=$(/bin/date +%Y%m%d)
echo $today
for i in tr_mmet.csv  tr_mmstk.csv
do
cut_suffix=$(printf ${i%%.*})
cp -p $i $cut_suffix.$today.csv
sleep 2
transfer_zip=$(gzip $cut_suffix.$today.csv)
scp -r -p "${transfer_zip}" tr_writer@tr_report.casper_bank.com:/data/Dropbox
sleep 2
done

1 个答案:

答案 0 :(得分:1)

这一行是你的错误transfer_zip=$(gzip $cut_suffix.$today.csv)

$(...)捕获命令输出,但gzip在正常情况下不会创建任何输出。

因此,您将空命令输出捕获到$transfer_zip变量中,并且shell很乐意将空字符串扩展到您的scp行。

您需要将生成的文件名称粘贴到$transfer_zip中。最简单的方法就是使用transfer_zip=$cut_suffix.$today.csv.gz,因为您知道gzip的运作方式。

如果您不想进行该文件名假设,可以使用gzip -c将其写入标准输出,然后手动将其重定向到> your_file_name的文件,然后使用{ scp命令中的{1}}。