| --- |
| page_title: 'Command: console' |
| description: >- |
| The terraform console command provides an interactive console for evaluating |
| expressions. |
| --- |
| |
| # Command: console |
| |
| The `terraform console` command provides an interactive console for |
| evaluating [expressions](/language/expressions). |
| |
| ## Usage |
| |
| Usage: `terraform console [options]` |
| |
| This command provides an interactive command-line console for evaluating and |
| experimenting with [expressions](/language/expressions). |
| You can use it to test interpolations before using them in configurations |
| and to interact with any values currently saved in |
| [state](/language/state). If the current state is empty or has not yet been created, you can use the console to experiment with the expression syntax and |
| [built-in functions](/language/functions). The console holds a [lock on the state](/language/state/locking), and you will not be able to use the console while performing other actions that modify state. |
| |
| To close the console, enter the `exit` command or press Control-C |
| or Control-D. |
| |
| For configurations using |
| [the `local` backend](/language/settings/backends/local) only, |
| `terraform console` accepts the legacy command line option |
| [`-state`](/language/settings/backends/local#command-line-arguments). |
| |
| ## Scripting |
| |
| The `terraform console` command can be used in non-interactive scripts |
| by piping newline-separated commands to it. Only the output from the |
| final command is printed unless an error occurs earlier. |
| |
| For example: |
| |
| ```shell |
| $ echo 'split(",", "foo,bar,baz")' | terraform console |
| tolist([ |
| "foo", |
| "bar", |
| "baz", |
| ]) |
| ``` |
| |
| ## Remote State |
| |
| If [remote state](/language/state/remote) is used by the current backend, |
| Terraform will read the state for the current workspace from the backend |
| before evaluating any expressions. |
| |
| ## Examples |
| |
| The `terraform console` command will read the Terraform configuration in the |
| current working directory and the Terraform state file from the configured |
| backend so that interpolations can be tested against both the values in the |
| configuration and the state file. |
| |
| With the following `main.tf`: |
| |
| ```hcl |
| variable "apps" { |
| type = map(any) |
| default = { |
| "foo" = { |
| "region" = "us-east-1", |
| }, |
| "bar" = { |
| "region" = "eu-west-1", |
| }, |
| "baz" = { |
| "region" = "ap-south-1", |
| }, |
| } |
| } |
| |
| resource "random_pet" "example" { |
| for_each = var.apps |
| } |
| ``` |
| |
| Executing `terraform console` will drop you into an interactive shell where you |
| can test interpolations to: |
| |
| Print a value from a map: |
| |
| ``` |
| > var.apps.foo |
| { |
| "region" = "us-east-1" |
| } |
| ``` |
| |
| Filter a map based on a specific value: |
| |
| ``` |
| > { for key, value in var.apps : key => value if value.region == "us-east-1" } |
| { |
| "foo" = { |
| "region" = "us-east-1" |
| } |
| } |
| ``` |
| |
| Check if certain values may not be known until apply: |
| |
| ``` |
| > random_pet.example |
| (known after apply) |
| ``` |
| |
| Test various functions: |
| |
| ``` |
| > cidrnetmask("172.16.0.0/12") |
| "255.240.0.0" |
| ``` |