Когда вы вызываете его как bash task.sh
, bash присваивает «task.sh» значение $ 0 (из руководства по bash : «Если Bash вызывается с файлом команд [...], $ 0 равно установить имя этого файла. ").
Когда вы создаете исходный файл, bash не изменяет $ 0, он просто выполняет скрипт в текущей среде. Что в $ 0 в вашей нынешней среде?
$ echo "$0"
-bash
Начальная черта будет интерпретироваться dirname
как опция.
Если это работа cron, зачем ты это делаешь?
Если вам нужен исходный текст вашего скрипта, это будет работать, если ваша оболочка bash:
SCRIPTPATH="${CUR_DIR}/${BASH_ARGV[0]}"
Однако оболочка cron, я полагаю, / bin / sh. Даже если / bin / sh является символической ссылкой на bash, когда bash вызывается как sh, он будет пытаться вести себя POSIXly: массив BASH_ARGV, вероятно, не будет вам доступен.