diff --git a/packer_test/provisioner_tests/shell/provisioner_test.go b/packer_test/provisioner_tests/shell/provisioner_test.go index 605170c8f..480544b8e 100644 --- a/packer_test/provisioner_tests/shell/provisioner_test.go +++ b/packer_test/provisioner_tests/shell/provisioner_test.go @@ -65,3 +65,18 @@ func (ts *PackerShellProvisionerTestSuite) TestShebangAsOptionNotInline() { SetArgs("build", "templates/no_shebang_inline_but_as_option.pkr.hcl"). Assert(check.MustSucceed()) } + +func (ts *PackerShellProvisionerTestSuite) TestInvalidShebangAsOption() { + dir := ts.MakePluginDir() + defer dir.Cleanup() + + ts.PackerCommand().UsePluginDir(dir). + SetArgs("plugins", "install", "github.com/hashicorp/docker"). + Assert(check.MustSucceed()) + + ts.PackerCommand().UsePluginDir(dir). + AddEnv("HOME", os.Getenv("HOME")). + AddEnv("PATH", os.Getenv("PATH")). + SetArgs("build", "templates/shebang_as_option_invalid.pkr.hcl"). + Assert(check.MustFail()) +} diff --git a/packer_test/provisioner_tests/shell/templates/shebang_as_option_invalid.pkr.hcl b/packer_test/provisioner_tests/shell/templates/shebang_as_option_invalid.pkr.hcl new file mode 100644 index 000000000..a1a603217 --- /dev/null +++ b/packer_test/provisioner_tests/shell/templates/shebang_as_option_invalid.pkr.hcl @@ -0,0 +1,17 @@ +source "docker" "test" { + image = "debian:bookworm" + discard = true +} + +build { + sources = ["docker.test"] + + provisioner "shell" { + inline_shebang = "#!/bin/bash -ex" + inline = [ + "head -1 <\"$0\" | grep -qE '^#!/bin/bash'", + "if grep -qE \"^#!/bin/sh\" <\"$0\"; then exit 1; fi", + "cat \"$0\"" + ] + } +}