Skip to content

Deployment errors if default shell on remote host is not bash #200

@ghost

Description

Hi there.

Problem

I was trying to deploy my project to a Debian server, which has dash configured as the default shell. I was running into weird errors like this:

--> Deploying to production environment
--> on host ***

  ○ deploying origin/master
  ○ executing pre-deploy-local
  ○ executing pre-deploy `node -v && npm -v`
v16.13.0
8.1.0
sh: 1: Bad substitution

  pre-deploy hook failed

Deploy failed
Deploy failed with exit code: 1

Cause

After some digging, I conjecture that the deployment script uses some bash-specific features not compatible with dash. For example, this line...

run "mkdir -p $path/{shared/{logs,pids},source}"

...does not expand correctly, treating curly braces as part of the directory name:
image

Ultimately the point of failure is ssh running commands in whatever is configured to be the default shell:

$shell $@

Proposed changes

It would be great if the script either

  • was rewritten in a portable style, or
  • executed its remote commands in bash, which is probably a much easier fix.

Or, if you don't intend to change this behavior, it would be nice if it at least could be mentioned in the docs.

I tried tweaking that part of the script myself, but unfortunately didn't have enough shell knowledge to succeed.

Prior report: Unitech/pm2#1553

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions