【发布时间】:2015-07-27 20:16:18
【问题描述】:
注意,文件夹和 ip 有 obv。已更改为能够在 SO 上发布;)
基于以下帖子:Rsync syntax error when run from bash script 我构建了以下 bash 脚本以尝试运行 rsync 命令。但我无法让事情正常工作。
通过将选项设置为数组,这没有传递端口号...
#!/bin/bash
options=("-avz" "--delete" "--chmod=ug=rwx,o=rx" "--exclude '.idea*" "--exclude '*.git*" "--exclude 'node-sass'" "-e'ssh -p 44'")
src="/cygdrive/d/Work/site/"
trg="john@12.12.12.12:/var/node/john.site.com/"
rsync "${options[@]}" "$src" "$trg"
或者将选项作为字符串传递..
#!/bin/bash
options="-avz --delete --chmod=ug=rwx,o=rx --exclude '.idea*' --exclude '*.git*' --exclude 'node-sass' -e'ssh -p 44'"
src="/cygdrive/d/Work/site/"
trg="john@12.12.12.12:/var/node/john.site.com/"
rsync "$options" "$src" "$trg"
作为一个字符串刚刚返回一个错误:
rsync: -avz --delete --chmod=ug=rwx,o=rx --exclude '.idea*' --exclude '.git' --exclude 'node-sass' -e'ssh -p 44'#015: 未知选项
这是正常工作的 rsync:
rysnc -avz --delete --chmod=ug=rwx,o=rx --exclude ".idea*" --exclude "*.git*" --exclude "node-sass" -e "ssh -p 44" /cygdrive/d/Work/site/ john@12.12.12.12:/var/node/john.site.com/
在以下帮助下的新尝试: 我创建了一个 ssh 配置条目以绕过将端口号设置为 rsync 选项的要求,删除所有排除项,输入他选择单引号字符串并通过 herestring 传递:
#!/bin/bash
opts='-avz --delete --chmod=ug=rwx,o=rx'
src="/cygdrive/d/Work/site/"
trg="john@mysite:/var/node/john.site.com/"
rsync <<<$opts "$src" "$trg"
通过 cli 的新命令看起来像(并且有效):
rsync -avz --delete --chmod=ug=rwx,o=rx /cygdrive/d/Work/site/ john@mysite:/var/node/john.site.com/
但我明白了:
rsync: link_stat "/cygdrive/d/Work/site/\#015" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1165) [sender=3.1.1]
【问题讨论】:
-
我强烈建议您在尝试抽象出选项并在运行时构建 rsync 命令之前专注于制作一个有效的 rsync 命令。
-
rsync 命令完美运行,只是在 bash 中不行
-
我不明白。你有一个有效的 rsync 命令吗?这是什么?
-
我将 iost 我当前在宏中使用的工作 rsync 命令.. 给我一点时间。
-
\#015业务清楚地表明您的脚本被保存为 DOS 文本文件,而不是 UNIX 文件。使用dos2unix转换它们,并且——在未来——考虑使用本机支持UNIX 文本文件的文本编辑器。 (例如,如果您使用vim,即使是 Windows 的图形 Vim,您也可以运行:set fileformat=unix以避免 DOS 换行问题)。