Foxhunt
Foxhunt

Reputation: 870

How to echo a multi line variable in Github Actions?

I have stored a multiline environnement variable thanks to github docs.

- name: copy
  run: |
     echo 'CONTENT_ENV<<EOF' >> $GITHUB_ENV
     cat README.md >> $GITHUB_ENV
     echo 'EOF' >> $GITHUB_ENV

I would like to get it, but this code give one line :

 - name: paste
   run: echo $CONTENT_ENV > index.md

The worflow shows the variable properly stored in env (with spaces) :

workflow

Upvotes: 8

Views: 17065

Answers (2)

Jorge Arias
Jorge Arias

Reputation: 41

You can use an option like this

- name: Output file
  id: read-file
  run: |
    FILE_CONTENT="$(<${FILE_NAME})"
    printf "npmrc_content<<EOF\n%s\nEOF\n" "${FILE_CONTENT}" >> "$GITHUB_OUTPUT"

Upvotes: 1

Bertrand Martel
Bertrand Martel

Reputation: 45362

Your variable is properly stored, but you need to add quotes if you want to preserve the newlines :

- name: paste
  run: echo "$CONTENT_ENV" > index.md
- name: test
  run: cat index.md

Short explanation is that default field separator is whitespace (space, tab and newline), so if you don't use quotes, echo will consider all newlines separated strings as different arguments. See this post for more in-depth explanation

Upvotes: 9

Related Questions