bash – 确定shell脚本是否已执行“源”
shell脚本有可能测试它是否通过源码执行?也就是说,例如,
$ source myscript.sh $ ./myscript.sh myscript.sh能区分这些不同的shell环境吗?
我想,山姆想做什么可能是不可能的。
取决于什么程度的半卧室解决方法是可能的,取决于… > …用户的默认shell,和 如果我正确地理解Sam的要求,他想要一个“脚本”, > …不能直接执行通过调用它的名称myscript 首先要考虑的是这些 >直接通过其名称(myscript)调用脚本需要第一行 对于’1’:: 对于’2’。和’3.’: 那么,以使用Bashism的方式写脚本呢? Bashism是一个 示例:在Bash中,脚本所看到的环境知道$ BASH, 我现在假设… > …脚本使用#!/ bin / bash作为它的第一行, 这意味着可以使用列出的值进行以下调用 vars+invok's | ./scriptname | sh scriptname | bash scriptname | . scriptname ---------------+--------------+---------------+-----------------+------------- $0 | ./scriptname | ./scriptname | ./scriptname | -bash $SHLVL | 2 | 1 | 2 | 1 $SHELLOPTS | braceexpand: | (empty) | braceexpand:.. | braceexpand: $BASH | /bin/bash | (empty) | /bin/bash | /bin/bash $BASH_ARGV | (empty) | (empty) | (empty) | scriptname $BASH_SUBSHELL | 0 | (empty) | 0 | 0 $SHELL | /bin/bash | /bin/bash | /bin/bash | /bin/bash $OPTARG | (empty) | (empty) | (emtpy) | (emtpy) 现在你可以把一个逻辑到你的文本脚本: >如果$ 0不等于-bash,则执行退出$ SOMERETURNVALUE。 如果脚本通过sh myscript或bash myscript调用,那么它会 所以把它放在你的非可执行文件myscript.txt附近它的开始像一样 echo BASH=$BASH test x${BASH} = x/bin/bash && echo "$? : FINE.... You're using 'bash ...'" test x${BASH} = x/bin/bash || echo "$? : RATS !!! -- You're not using BASH and I will kick you out!" test x${BASH} = x/bin/bash || exit 42 test x"${0}" = x"-bash" && echo "$? : FINE.... You've sourced me,and I'm your login shell." test x"${0}" = x"-bash" || echo "$? : RATS !!! -- You've not sourced me (or I'm not your bash login shell) and I will kick you out!" test x"${0}" = x"-bash" || exit 33 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |