--- title: Shell Command description: Instructions on how to integrate Shell commands into Home Assistant. ha_category: - Automation ha_iot_class: Local Push ha_release: 0.7.6 ha_quality_scale: internal ha_codeowners: - '@home-assistant/core' ha_domain: shell_command ha_integration_type: integration --- This integration can expose regular shell commands as services. Services can be called from a [script] or in [automation]. Shell commands aren't allowed for a camel-case naming, please use lowercase naming only and separate the names with underscores. [script]: /integrations/script/ [automation]: /getting-started/automation/ ## Configuration ```yaml # Example configuration.yaml entry # Exposes service shell_command.restart_pow shell_command: restart_pow: touch ~/.pow/restart.txt ``` {% configuration %} alias: description: Give the shell command a name (alias) as a variable and set the command you want to execute after the colon. e.g., `alias`:`the shell command you want to execute`. required: true type: string {% endconfiguration %} The commands can be dynamic, using templates to insert values for arguments. When using templates, shell_command runs in a more secure environment which doesn't allow any shell helpers like automatically expanding the home dir `~` or using pipe symbols to run multiple commands. Similarly, only content after the first space can be generated by a template. This means the command name itself cannot be generated by a template, but it must be literally provided. Any service data passed into the service call to activate the shell command will be available as a variable within the template. `stdout` and `stderr` output from the command are both captured and will be logged by setting the [log level](/integrations/logger/) to debug. ## Execution The `command` is executed within the [configuration directory](/docs/configuration/).