首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bash覆盖$0 -脚本的名称

问Bash覆盖$0 -脚本的名称
EN

Stack Overflow用户
提问于 2015-09-02 09:47:44
回答 2查看 691关注 0票数 2

有一个类似busybox的shell脚本,它根据调用它的符号链接来决定该做什么。

我想直接调用它,传递符号链接的名称,而不实际创建符号链接。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-02 11:51:41

如果它是一个脚本,如果它可以被引用:

代码语言:javascript
复制
bash -c '. script.sh' overridden-name param1 param2

为我的案子工作。

票数 2
EN

Stack Overflow用户

发布于 2015-09-02 10:58:02

虽然这个想法永远不会出现在我的脑海中,但我尝试了一下,只是为了好玩。我的结论是:你不能(至少,我不能)。

这里是如何和为什么,假装你会用$1作为潜在的符号链接。

代码语言:javascript
复制
#!/bin/bash

# not surprisingly, you cannot do this:
# 0 = $1
# '0' is not a valid variable name, so bash try to use it as a command, hence:
# 0: command not found

# you CAN do this, as meaningless as it seem:
# $0 = $1
# but say your script is called as ./foobar.sh, this will actually result in:
# ./foobar.sh = whatever_$1_is
# ...which is a nice fork bomb, since you'll call your script again,
# which will call your script again,
# which will call your script again,
# which will call ...etc etc etc
# Try it! :-)

# I've just learned about $BASH_SOURCE from here:
# http://www.tldp.org/LDP/abs/html/debugging.html#BASHSOURCEREF
echo BASH_SOURCE $BASH_SOURCE
# you CAN do this:
BASH_SOURCE = $1
# ...but to no use, since the following will show that BASH_SOURCE
# rightfuly behave as read-only:
echo BASH_SOURCE $BASH_SOURCE #unmodified

因此,如果您的想法是在不影响创建符号链接的情况下建立"a la busybox“行为的话,我建议:

代码语言:javascript
复制
#!/bin/bash
called_as = $1 # to be replaced with called_as = $0 once you're done prototyping
# if called_as such name do this
# if called_as such other name do that
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32349871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档