编写了一个 bash shell 脚本,用于rsync
将文件部署到实时 Web 服务器。
在执行之前,脚本输出我的 shell 脚本生成的完整命令:
rsync --chmod="ug=rwx" -e="ssh" --filter="merge .deploy/filters" --dry-run --recursive -v --size-only "/var/www/vhosts/staging/mysite.com/httpdocs/" "[email protected]:/var/www/vhosts/mysite.com/domains/mysite.com/httpdocs"
它正在我的 shell 脚本中运行,如下所示:
local command=`getDeploymentCommand "$deploy_direction" "$mode"`
echo $command
echo `$command`
...并产生以下错误:
rsync: Invalid argument passed to --chmod ("ug=rwx")
在我看来语法chmod
是正确的。真正奇怪的是,实际复制粘贴到 shell 中并执行的命令工作正常。为什么会这样?我该如何让它工作?
答案1
查看手册页,引号不是必需的,并且可能在 shell 脚本中执行了非预期的操作,而不是直接粘贴到命令行中。请尝试从命令中删除这些引号。
问题是 shell 允许在双引号内插入变量。如果你使用单引号,它不允许插入变量,或者你可以对引号本身进行转义以避免插入变量。