cp command won't run if executed from shell script

28,355

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:

  1. On the command line (which works), do a which cp
  2. Whatever the reply, then copy that and use it as the cp in the script (e.g. /bin/cp)
  3. Check the widcard expansion, run your script with bash -x script-name and see if you get what you expect.
  4. echo $? after the copy in the script - if it is zero then it (thinks it) worked.
  5. Do a ls -ld /var/www/ksite/app from your script, maybe someone set a symbolic link?
  6. If it still fails, source the script from the command-line and see if that works . script-name
  7. 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:

  1. 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.

  2. I copied files and the only way it worked for me at script was cp <source_dir>/fileName <dest_dir>/fileName whereas at command line cp <source_dir>/fileName <dest_dir> worked well too.

Share:
28,355
Kupe3
Author by

Kupe3

Updated on July 05, 2022

Comments

  • Kupe3
    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
    Kupe3 almost 12 years
    please 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
    Kupe3 almost 12 years
    i 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
    hardmath almost 12 years
    File permissions? Presumably PHP is running as a different user.
  • Kupe3
    Kupe3 almost 12 years
    /bin/bash, /bin/cp and my .sh script are all set to 0755, so anyone can run these
  • cdarke
    cdarke almost 12 years
    AH 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
    Kupe3 almost 12 years
    i 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
    Levon almost 12 years
    @Kupe3 I brought up the permission issue 2 hours ago in a comment :)