当我运行此脚本(下面列出)
时,我继续这样做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
答案 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}}。