【问题标题】:Shell script could run with absolute path, but error with relative pathShell 脚本可以使用绝对路径运行,但相对路径出错
【发布时间】:2014-12-14 07:16:04
【问题描述】:

环境:Centos6 64bit

有一个shell脚本(名为mysql.sh);它位于文件中:/home/user1/sbin/mysql.sh

在运行带有参数'restart'的脚本时,其结果如下:

1)密码:/home/user1/sbin/

#./mysql.sh restart                           Fail        Prompt:No such file or directory
#/home/user1/sbin/mysql.sh restart            ok
#../sbin/mysql.sh restart                     ok

2) 密码:/home/user1

#./sbin/mysql.sh restart                      Fail       Prompt:No such file or directory

3)密码:/

#/home/user1/sbin/mysql.sh restart          ok

任何路径下,mysql.sh都可以通过参数'start'和'stop'成功运行。

所以我猜这可能是脚本 (mysql.sh) 中的错误。此脚本与官方mysql.sh(mysql.server 脚本)类似,但有一些修改。

那有什么问题呢?

【问题讨论】:

  • ../sbin/mysql.sh restart 有效吗?听起来可能是错字,或者是您未向我们展示的代码中的错误。
  • 说明/home/user1/sbin restart 有效的行暗示脚本 /home/user1/sbin 而不是/home/user1/sbin/mysql.sh。您无法执行目录(目录的x 权限授予您使用目录中文件的权限)。我认为这实际上是问题中的一个错字(你从最后错过了mysql.sh)。
  • # 标记是否表明您正在以用户 root 的身份运行脚本?路径/home/user1/sbin/mysql.sh 中有多少个符号链接(检查ls -l / /home /home/user1 /home/user1/sbin /home/user1/sbin/mysql.sh)?是否涉及任何不寻常的权限——同样的ls -l 命令会揭示这一点?
  • @JonathanLeffler,是的,你是对的,我最后错过了 mysql.sh。现在已经修改了。
  • 您确定在点和斜线之间没有空格,例如#. /mysql.sh?你为什么要使用“./”呢?这不是必需的。目录/home/user1 也是如此。尝试仅使用 sbin/mysql.sh restart 调用您的脚本。键入命令时文件名完成是否有效?

标签: mysql linux shell


【解决方案1】:

尝试使用“sh ./mysql.sh”

确保在脚本的第一行有 shebang。

【讨论】:

  • 如果您使用sh ./mysql.sh,则shebang 线无关紧要。仅当您直接运行脚本时,shebang 行才重要,例如 mysql.sh./mysql.sh
  • 对不起,没用。
最近更新 更多