加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

bash – 脚本全名和路径$0在调用时不可见

发布时间:2020-12-15 21:21:12 所属栏目:安全 来源:网络整理
导读:我有一个脚本“task.sh”,其中包含以下内容: #!/bin/bashCUR_DIR=`pwd`SCRIPTPATH="${CUR_DIR}/`dirname $0`" 当我用“bash task.sh”调用它时,它按预期工作,但是当用“.task.sh”调用它时 $. log/task.sh dirname: invalid option -- bTry `dirname --help
我有一个脚本“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 manual:“如果使用命令文件调用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时,它会尝试表现为POSIXly:BASH_ARGV数组可能无法使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读