2017-04-26 19 views
0

作为部署到服务器的Capistrano Ruby任务的一部分,我希望它输出Git消息并提交刚刚部署的代码。Capistrano/Ruby执行在变量后添加分号

有了这个:

git_message = `git log -1 HEAD --pretty=format:%s` 
git_commit = `git rev-parse HEAD` 
git_commit = "https://example.com/myorg/myrepo/commit/" + git_commit 

execute "echo \"Deployed \\\"#{git_message}\\\": #{git_commit}\" | a_command_that_posts_to_slack" 

它的输出是这样的:

Deployed "Merge branch 'feature/some-feature' into develop": https://example.com/myorg/myrepo/commit/0fdfa09fbfe012649fb0a998aa2e99cb5fd7c8b3; 

注意分号提交哈希的尽头。我已经使用puts确认git_commit不以分号结尾,而git_message没有分号,并且在它之后也没有。

什么是添加分号,我该如何删除它?

+0

当你说它的输出,你的意思是松弛?我看到你有'a_command_that_posts_to_slack'或许这个命令添加了分号?尝试重定向到一个文件,而不是滚动到该命令。 – ddubs

+0

我在Slack中看到了分号,但我也在终端中看到它。在没有管道的情况下出现相同的分号:'execute“echo \”Deployed \\“#{git_message} \\\”:#{git_commit} \“”' – Hugo

回答

1

这是因为你在你的命换行,这Capistrano是使用转化为分号,想着要执行多个命令(每行一个)。

Ruby中的反引用捕获整个过程的标准输出,包括尾随的换行符。使用chomp删除它们。

git_message = `git log -1 HEAD --pretty=format:%s`.chomp 
git_commit = `git rev-parse HEAD`.chomp 
git_commit = "https://example.com/myorg/myrepo/commit/" + git_commit 

execute "echo \"Deployed \\\"#{git_message}\\\": #{git_commit}\" | a_command_that_posts_to_slack"