我有一个脚本"task.sh",其中包含以下内容:
#!/bin/bash
CUR_DIR=`pwd`
SCRIPTPATH="${CUR_DIR}/`dirname $0`"
Run Code Online (Sandbox Code Playgroud)
当我用"bash task.sh"调用它时,它按预期工作,但是当用".task.sh"调用它时
$ . log/task.sh
dirname: invalid option -- b
Try `dirname --help' for more information.
Run Code Online (Sandbox Code Playgroud)
当在crontab中安排脚本时,它也不能正常工作.有人可以告诉我我做错了什么或以不同的方式获取不是当前目录的脚本目录?
当你调用它时bash task.sh,bash将"task.sh"分配给$ 0(来自bash手册:"如果使用命令文件调用Bash,则将$ 0设置为该文件的名称.").
当您获取文件时,bash不会改变$ 0,它只是在当前环境中执行脚本.你现在的环境中有多少0美元?
$ echo "$0"
-bash
Run Code Online (Sandbox Code Playgroud)
前导短划线将dirname作为选项进行解释.
如果它是一个cron工作,你为什么要采购它?
如果您需要获取脚本,那么如果您的shell是bash,这将有效:
SCRIPTPATH="${CUR_DIR}/${BASH_ARGV[0]}"
Run Code Online (Sandbox Code Playgroud)
但是,我相信,cron的shell是/ bin/sh.即使/ bin/sh是bash的符号链接,当bash被调用为sh时,它会尝试表现为POSIXly:BASH_ARGV数组可能无法使用.