1
votes

I'm trying to run a small bash script inside my CodeBuild process as per the AWS documentation and this.

deploy.sh can be found in the src/ directory:

#!/bin/bash

pwd=$PWD

for dir in */ ; do
  target="$pwd/${dir%/}"
  cd "$target"
  npm install
  sls deploy && sls s3deploy
done

buildspec file:

version: 0.2

phases:
  install:
    runtime-versions:
      nodejs: 10
    commands:
    - cd backend/functions/src
    - npm install serverless
  build:
    commands:
    - ls
    - ./deploy.sh

after the ls command above in the logs, I can see that deploy.sh is there in the current directory.

Error:

/codebuild/output/tmp/script.sh: 4: /codebuild/output/tmp/script.sh: ./deploy.sh: not found

I've also tried using the command /bin/bash deploy.sh but this results in another error:

deploy.sh: line 2: $'\r': command not found

deploy.sh: line 4: $'\r': command not found

deploy.sh: line 7: $'\r': command not found

deploy.sh: line 8: syntax error near unexpected token `$'do\r''

deploy.sh: line 8: `for dir in */ ; do

1
Did you make the file under Windows? Convert to DOS \r line endings to unix. - Walter A
@WalterA nice catch. it was written in WSL, changing from CRLF to LF fixed the problem - ChumiestBucket

1 Answers

4
votes

(First written as a comment, it solved the problem)

The files were made in Windows.
Change CRLF to LF and the \r is gone.