2012-07-04 70 views
2

执行我有很简单的shell脚本cp命令将不会运行,如果从shell脚本

#!/bin/bash  
cp -rf /var/www/ksite/app2/* /var/www/ksite/app 
echo "----" 
echo "done" 

,但似乎cp命令失败

如果我从终端执行的一切

cp -rf /var/www/ksite/app2/* /var/www/ksite/app 

工作好。有人能告诉我如何在shell脚本中包含cp吗?

感谢

+3

脚本中是否有错误?你为什么认为'cp'失败? – rush

+1

* cp命令以什么方式失败?什么是错误信息?这很可能是一个$ PATH问题。 – cdarke

+0

您是否使shell脚本成为可执行文件? – hardmath

回答

1

确保你真的有打击在/bin/bash。我认为一个面糊哈希爆炸是:

#!/usr/bin/env bash 

它使用env命令查找bash的二进制和环境而定。

+0

请看我上面的评论。脚本工作正常。它只是cp命令,不会任何事情(不复制文件/文件夹并且不显示任何错误)。奇怪的是,如果我在终端上运行相同,它的工作正常。我故意使用绝对路径。 – Kupe3

4

我们似乎对这个脚本如何失败有疑问。如果没有错误信息,那么这是一个奇怪的。我建议:

  1. 在命令行(工作),做一个which cp
  2. 无论答复,然后复制,并在脚本中使用它作为cp(如/bin/cp
  3. 检查widcard扩展,用bash -x script-name运行你的脚本,看看你是否得到你所期望的。
  4. echo $?复制后的脚本 - 如果它为零,然后它(认为它)的工作。
  5. 从脚本中输入ls -ld /var/www/ksite/app,也许有人设置了符号链接?
  6. 如果仍然失败,请从命令行获取脚本并查看是否有效. script-name
  7. 仔细检查副本是否确实失败! (也许这应该是第1步。)
+0

我用bash -x脚本名称尝试过,它工作,所以我得出结论说,如果从终端调用脚本,脚本工作。以前我使用'$ output = shell_exec('bash /var/www/test/b.sh')测试从php文件调用的脚本; echo $ output';为什么它使用从PHP失败? – Kupe3

+0

文件权限?据推测,PHP作为一个不同的用户运行。 – hardmath

+0

/bin/bash,/ bin/cp和我的.sh脚本都设置为0755,所以任何人都可以运行这些 – Kupe3

0

只是覆盖所有的基地..做权限不同之间的excutions ..即你执行一个与sudo/root权限,其他作为用户(不太可能,但以为我会问,因为我们不知道确切的错误是什么)

+0

@ Kupe3我在2小时前提出了许可问题,发表评论:) – Levon

1

我有类似的问题。对我有什么帮助:

  1. 我用windows和腻子来写脚本,所以我在行尾有\ r \ n。当然,你只有\ n符号。

  2. 我复制的文件和它在脚本中为我工作的唯一方式是cp <source_dir>/fileName <dest_dir>/fileName,而在命令行cp <source_dir>/fileName <dest_dir>中也运行得很好。