cp command won't run if executed from shell script
Solution 1
We seem to have doubt as to how this script fails. If there is no error message then this is a strange one. I suggest:
- On the command line (which works), do a
which cp
- Whatever the reply, then copy that and use it as the
cp
in the script (e.g./bin/cp
) - Check the widcard expansion, run your script with
bash -x script-name
and see if you get what you expect. -
echo $?
after the copy in the script - if it is zero then it (thinks it) worked. - Do a
ls -ld /var/www/ksite/app
from your script, maybe someone set a symbolic link? - If it still fails, source the script from the command-line and see if that works
. script-name
- Double check that the copy did actually fail! (maybe that should be step 1.)
Solution 2
Make sure you really have bash at /bin/bash
. I think a batter hash bang is:
#!/usr/bin/env bash
This uses the env command to locate the bash binary and set the environment.
Solution 3
I had similar problem. What helped me:
I used windows and putty to write script, so I had \r\n at the end of lines. Be sure, you have only \n symbol.
I copied files and the only way it worked for me at script was
cp <source_dir>/fileName <dest_dir>/fileName
whereas at command linecp <source_dir>/fileName <dest_dir>
worked well too.
Kupe3
Updated on July 05, 2022Comments
-
Kupe3 almost 2 years
i have very simple shell script
#!/bin/bash cp -rf /var/www/ksite/app2/* /var/www/ksite/app echo "----" echo "done"
but seems cp command fails
if i execute
cp -rf /var/www/ksite/app2/* /var/www/ksite/app
from terminal everything work ok. Can someone tell me how to include cp in shell script?
Thanks
-
Kupe3 almost 12 yearsplease see my comment above. script works ok. it is just cp command that doesn't anything (not copying files/folders and not showing any errors). The strange bit is that if i run the same in the terminal it works ok. I used absolute path intentionally.
-
Kupe3 almost 12 yearsi tried with bash -x script-name and it worked, so i concluded that script works if called from terminal. Previously i was testing the script called from php file using '$output = shell_exec('bash /var/www/test/b.sh'); echo $output'; Why it is failing when used from php?
-
hardmath almost 12 yearsFile permissions? Presumably PHP is running as a different user.
-
Kupe3 almost 12 years/bin/bash, /bin/cp and my .sh script are all set to 0755, so anyone can run these
-
cdarke almost 12 yearsAH HA!
bash -x script-name
worked you say? Maybe your#!
line is wrong, see @unwind's answer above. Maybe your bash script is not running from PHP? PHP programs sometimes run in a weird environment (for security), are you picking up a restricted shell? By the way, it might have helped if you had mentioned PHP from the outset. -
Kupe3 almost 12 yearsi found the problem. missing permission on the destination folder. so cp coundnt create files/folders and failed to execute. from terminal everything was ok as that user had permissions to create files in destination folder.
-
Levon almost 12 years@Kupe3 I brought up the permission issue 2 hours ago in a comment :)