Capistrano/Ruby execute 是在变量后面加分号
Capistrano/Ruby execute is adding a semicolon after a variable
作为部署到服务器的 Capistrano Ruby 任务的一部分,我希望它输出 Git 消息并提交刚刚部署的代码。
有了这个:
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
没有分号,后面也没有分号。
什么添加了分号,我该如何删除它?
也许它正在执行 :
作为 Bash shell 内置命令,因此它试图用分号终止该命令?尝试删除 :
。我还担心插入双引号,因为包含双引号的提交消息可能会让您有些头疼。
参考 Bash 内置 :
What is the purpose of the : (colon) GNU Bash builtin?
这是因为你的命令中有换行符,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"
作为部署到服务器的 Capistrano Ruby 任务的一部分,我希望它输出 Git 消息并提交刚刚部署的代码。
有了这个:
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
没有分号,后面也没有分号。
什么添加了分号,我该如何删除它?
也许它正在执行 :
作为 Bash shell 内置命令,因此它试图用分号终止该命令?尝试删除 :
。我还担心插入双引号,因为包含双引号的提交消息可能会让您有些头疼。
参考 Bash 内置 :
What is the purpose of the : (colon) GNU Bash builtin?
这是因为你的命令中有换行符,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"