I have check.sh script that I wish to run on the target nodes:

cat check.sh

str=`echo $1 | sed -e 's#[\][\]n# #g'`
echo $str>check.row


It is suppose to replace \\n with a single white space from the argument 
and save it in check.row file.

When I run it manually on the target server i get good output results as 
shown below:

bash -x ./check.sh '/fin/app/01/scripts\\n/fin/app/01/sql'
> ++ echo '/fin/app/01/scripts\\n/fin/app/01/sql'
> ++ sed -e 's#[\][\]n# #g'
> + str='/fin/app/01/scripts /fin/app/01/sql'
> + echo /fin/app/01/scripts /fin/app/01/sql
>

Here is the check.row file output:

[user1@remotehost1 ~]$ cat check.row
> /fin/app/01/scripts /fin/app/01/sql


However, when i run the same using ansible shell or command module I do not 
get the expected results.

Below is my playbook:

  tasks:
   - copy:
       src: "{{ playbook_dir }}/files/check.sh"
       dest: "~/"
       mode: 0754


   - set_fact:
       install_dir: "{{ 
hostvars[\'localhost\'][\'command_result\'].stdout.split('\t')[2] }}"


   - shell: "bash -x  ~/check.sh '{{ install_dir }}' > ~/check_rollback.log"


See ansible's debug output below:   
   

> changed: [10.8.44.55] => {
>     "changed": true, 
>     "cmd": "bash -x  ~/check.sh '/fin/app/01/scripts\\n/fin/app/01/sql' > 
> ~/check_rollback.log", 
>     "delta": "0:00:00.118943", 
>     "end": "2019-09-04 10:50:16.503745", 
>     "invocation": {
>         "module_args": {
>             "_raw_params": "bash -x  ~/check.sh 
> '/fin/app/01/scripts\\n/fin/app/01/sql' > ~/check_rollback.log", 
>             "_uses_shell": true, 
>             "argv": null, 
>             "chdir": null, 
>             "creates": null, 
>             "executable": null, 
>             "removes": null, 
>             "stdin": null, 
>             "stdin_add_newline": true, 
>             "strip_empty_ends": true, 
>             "warn": true
>         }
>     }, 
>     "rc": 0, 
>     "start": "2019-09-04 10:50:16.384802", 
>     "stderr": "++ echo '/fin/app/01/scripts\\n/fin/app/01/sql'\n++ sed -e 
> 's#[\\][\\]n# #g'\n+ str='/fin/app/01/scripts\\n/fin/app/01/sql'\n+ echo 
> '/fin/app/01/scripts\\n/fin/app/01/sql'", 
>     "stderr_lines": [
>         "++ echo '/fin/app/01/scripts\\n/fin/app/01/sql'", 
>         "++ sed -e 's#[\\][\\]n# #g'", 
>         "+ str='/fin/app/01/scripts\\n/fin/app/01/sql'", 
>         "+ echo '/fin/app/01/scripts\\n/fin/app/01/sql'"
>     ], 
>     "stdout": "", 
>     "stdout_lines": []
> }


And here is the check.row file output:

[user1@remotehost1 ~]$ cat check.row
> /fin/app/01/scripts\\n/fin/app/01/sql


As you can instead of single whitespace it is now printing \\n. 

One can replicate this issue easily. Can you please suggest why am I 
getting this issue and how to fix this?

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/83c52c59-a105-41dd-b421-a55ce98cc332%40googlegroups.com.

Reply via email to