我有一个脚本“task.sh”,其内容如下:
#!/bin/bash
CUR_DIR=`pwd`
SCRIPTPATH="${CUR_DIR}/`dirname $0`"
当我用“bash task.sh”调用它时,它按预期工作,但是当用“.task.sh”调用它时
$ . log/task.sh
dirname: invalid option -- b
Try `dirname --help' for more information.
当脚本在 crontab 中计划时,它也不起作用。
有人可以告诉我我做错了什么或以不同的方式获取不是当前目录的脚本的目录
?
当你调用它时bash task.sh
,bash 将“task.sh”分配给 $0(来自bash手册 http://www.gnu.org/software/bash/manual/bashref.html#Special-Parameters:“如果使用命令文件调用 Bash [...] $0 将设置为该文件的名称。”)。
当您获取文件时,bash 不会更改 $0,它只是在当前环境中执行脚本。在您当前的环境中 0 美元有什么?
$ echo "$0"
-bash
前导破折号将被解释为dirname
作为一个选项。
如果它是在 cron 作业中,你为什么要采购它?
如果您需要获取脚本源,如果您的 shell 是 bash,则这将起作用:
SCRIPTPATH="${CUR_DIR}/${BASH_ARGV[0]}"
然而,我认为 cron 的 shell 是 /bin/sh。即使 /bin/sh 是 bash 的符号链接,当 bash 作为 sh 调用时,它也会尝试按 POSIX 方式运行:BASH_ARGV 数组可能对您不可用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)