以下是我使用 scp 协议传输两个文件的 shell 脚本。 第二个 scp 语句显示包含空格的源文件目录(请参见第 10 行,我在
Badge\ Docs
中添加了一个反斜杠,表示子文件夹名称为“Badge Docs”(两个单词之间有一个空格)。
# Copy revenue file
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof
# Copy PO_REPORT.xlsx
cd /data/storage/exp/Badge_Docs/
spawn scp -T ftpaccess@prod:"/storage/data/Badge\ Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
interact
当我在 Linux 服务器中运行该脚本时,该脚本可以正常工作。
Revenue.xlsx
和 PO_REPORT.xlsx
都会在其相应的目标文件夹中拾取/刷新。
[linux_prd]$ ./copy_data_reports.sh
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
ftpaccess@prod's password:
Revenue.xlsx 100% 130KB 1.5MB/s 00:00
spawn scp -T ftpaccess@prod:"/storage/data//Badge Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
ftpaccess@prod's password:
PO_REPORT.xlsx 100% 20MB 27.5MB/s 00:00
我们已将
copy_data_reports.sh
设置为通过 Control-M 运行。 Control-M 显示此脚本执行没有问题,但我看到只有“Revenue.xlsx”正在传输,而 the second file (PO_REPORT.xlsx) is not being transmitted.
我怀疑它可能与原始路径中存在的空间有关第二个 scp 语句(第一个 scp 的原始文件夹路径不包含空格,并且它有效)。
我确保将原始文件夹路径名括在双引号中
(")
并且我保留了反斜杠以指示路径之间有一个空格(“徽章文档”)。有什么我可能错过的吗?
---- 更新 -下面是通过 CONTROL-M 运行 copy_data_reports.sh 生成的日志文件:
spawn scp ftpaccess@asbi-prod:/storage/data/om_project/gpmo/revenue_bo/*Task5050-Revenue.xlsx /data/ASBI/data_files/storage/data/ato_project/gpmo_hc_ggpr/revenue_bo/
ftpaccess@asbi-prod's password:
Task5050-Revenue.xlsx 100% 130KB 50.3MB/s 00:00
spawn scp -T ftpaccess@asbi-prod:"/storage/data/ato_project/exp_hc/CX Red Badge Docs/CX_OPEN_PO_REPORT.xlsx" /data/ASBI/data_files/storage/data/ato_project/exp_hc/CX_Red_Badge_Docs/
ftpaccess@asbi-prod's password: <eof>
有趣的是,在运行第二个 scp 语句的密码执行时,CONTROL-M 触发的脚本作业似乎突然结束。
从 Linux 运行 scp shell 脚本与通过 CONTROL-M 触发相同的脚本有什么区别吗?我不明白为什么 CONTROL-M 触发的作业提前终止,因为 Control-M 运行的日志文件没有显示任何错误消息。感谢所有有用的意见。
有人在上面的评论部分建议将“interact”替换为“expect eof”,Control-M 似乎很喜欢它 - 它终于起作用了。
# Copy revenue file
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof
# Copy PO_REPORT.xlsx
cd /data/storage/exp/Badge_Docs/
spawn scp -T ftpaccess@prod:"/storage/data/Badge\ Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
expect "ftpaccess@prod's password:\n"
send "mypass\n"
send "exit\n"
expect eof # replacing "interact" -> works with Control-M
Control-M 执行脚本时生成的输出日志 - 现在显示 PO_REPORT.xls 已成功传输:
spawn scp ftpaccess@prod:/storage/revenue_bo/*Revenue.xlsx /data/revenue_bo/
ftpaccess@prod's password:
Revenue.xlsx 100% 130KB 1.5MB/s 00:00
spawn scp -T ftpaccess@prod:"/storage/data//Badge Docs/PO_REPORT.xlsx" /data/storage/exp/Badge_Docs/
ftpaccess@prod's password:
PO_REPORT.xlsx 100% 20MB 27.5MB/s 00:00