ansible.builtin.shell (v2.5.15) — module

Execute commands in nodes.

| "added in version" 0.2 of ansible.builtin"

Authors: Ansible Core Team, Michael DeHaan

stableinterface | supported by core

Install Ansible via pip

Install with pip install ansible==2.5.15

Description

The C(shell) module takes the command name followed by a list of space-delimited arguments. It is almost exactly like the M(command) module but runs the command through a shell (C(/bin/sh)) on the remote node.

For Windows targets, use the M(win_shell) module instead.

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Execute the command in remote shell; stdout goes to the specified file on the remote.
  shell: somescript.sh >> somelog.txt
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Change the working directory to somedir/ before executing the command.
  shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# You can also use the 'args' form to provide the options.
- name: This command will change the working directory to somedir/ and will only run when somedir/somelog.txt doesn't exist.
  shell: somescript.sh >> somelog.txt
  args:
    chdir: somedir/
    creates: somelog.txt
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Run a command that uses non-posix shell-isms (in this example /bin/sh doesn't handle redirection and wildcards together but bash does)
  shell: cat < /tmp/*txt
  args:
    executable: /bin/bash
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Run a command using a templated variable (always use quote filter to avoid injection)
  shell: cat {{ myfile|quote }}
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# You can use shell to run other executables to perform actions inline
- name: Run expect to wait for a successful PXE boot via out-of-band CIMC
  shell: |
    set timeout 300
    spawn ssh admin@{{ cimc_host }}

    expect "password:"
    send "{{ cimc_password }}\n"

    expect "\n{{ cimc_name }}"
    send "connect host\n"

    expect "pxeboot.n12"
    send "\n"

    exit 0
  args:
    executable: /usr/bin/expect
  delegate_to: localhost

Inputs

    
warn:
    default: true
    description:
    - if command warnings are on in ansible.cfg, do not warn about this particular line
      if set to no/false.
    required: false
    version_added: '1.8'
    version_added_collection: ansible.builtin

chdir:
    default: null
    description:
    - cd into this directory before running the command
    required: false
    version_added: '0.6'
    version_added_collection: ansible.builtin

stdin:
    default: null
    description:
    - Set the stdin of the command directly to the specified value.
    required: false
    version_added: '2.4'
    version_added_collection: ansible.builtin

creates:
    default: null
    description:
    - a filename, when it already exists, this step will B(not) be run.
    required: false

removes:
    default: null
    description:
    - a filename, when it does not exist, this step will B(not) be run.
    required: false
    version_added: '0.8'
    version_added_collection: ansible.builtin

free_form:
    default: null
    description:
    - The shell module takes a free form command to run, as a string.  There's not an
      actual option named "free form".  See the examples!
    required: true

executable:
    default: null
    description:
    - change the shell used to execute the command. Should be an absolute path to the
      executable.
    required: false
    version_added: '0.9'
    version_added_collection: ansible.builtin

Outputs

cmd:
  description: The command executed by the task
  returned: always
  sample: rabbitmqctl join_cluster rabbit@master
  type: string
delta:
  description: The command execution delta time
  returned: always
  sample: '0:00:00.325771'
  type: string
end:
  description: The command execution end time
  returned: always
  sample: '2016-02-25 09:18:26.755339'
  type: string
msg:
  description: changed
  returned: always
  sample: true
  type: boolean
rc:
  description: The command return code (0 means success)
  returned: always
  sample: 0
  type: int
start:
  description: The command execution start time
  returned: always
  sample: '2016-02-25 09:18:26.429568'
  type: string
stderr:
  description: The command standard error
  returned: always
  sample: 'ls: cannot access foo: No such file or directory'
  type: string
stdout:
  description: The command standard output
  returned: always
  sample: Clustering node rabbit@slave1 with rabbit@master ...
  type: string
stdout_lines:
  description: The command standard output split in lines
  returned: always
  sample:
  - u'Clustering node rabbit@slave1 with rabbit@master ...'
  type: list