Getting command not found when executing using shell module

Here is my playbook:

cat test.yml

>
-name:Play2
hosts:targetserver
tasks:

\-copy:src=\./centosscript\.sh dest=\~mode=775
\-shell:\~/centosscript\.sh

>

Here is my shell script:

cat centosscript.sh
>
#/bin/ksh
grabip=`ip r | grep kernel`
>

I also tried

>
grabip=`ifconfig | grep inet`
>

cat myhosts
>
[targetserver]
10.9.9.26
>

I get the following error when i run the playbook:

>
TASK
[copy]*************************************************************************************************************************************************
changed:[10.9.9.26]

TASK
[shell]************************************************************************************************************************************************
fatal:[10.9.9.26]:FAILED!=>{"changed":true,"cmd":"~/centosscript.sh","delta":"0:00:00.122291","end":"2020-03-17
12:18:49.485014","msg":"non-zero return code","rc":1,"start":"2020-03-17
12:18:49.362723","stderr":"/home/user1/centosscript.sh: line 2: ip: command not
found","stderr_lines":["/home/user1/centosscript.sh: line 2: ip: command not found"],"stdout":"","stdout_lines":}

PLAY RECAP
**************************************************************************************************************************************************
10.9.9.26 :ok=1 changed=1 unreachable=0 failed=1 skipped=0 rescued=0 ignored=0
>

When i run ip r or ifconfig commands they work fine on the target server.

Can you please help overcome this issue ?

Ansible is running the shell non-interactive, thus it uses a different environment.

Possible solutions:

- Use full paths for ip / ipconfig
- Define PATH in your script
- Define PATH in env parameter in your task

Regards
       Racke