类似 busybox,不同的软链,执行结果不同,是怎样实现的?

2019-07-24 16:06:02 +08:00
 asxalex

如题,在 busybox 中,busybox 命令会被软链到 ls,又被软链到 wc,但是在执行软链 ls 和 wc 的时候,输出(命令的作用)又是不同的,请教一下大佬们,这个咋实现的?

想在 google 里面搜索的,但是不知道咋表达,也没找到有用的信息。

4327 次点击
所在节点    Linux
14 条回复
yangg
2019-07-24 16:13:55 +08:00
bash

if [ "$(basename $0)" = 'wc' ] then
0ZXYDDu796nVCFxq
2019-07-24 16:17:40 +08:00
看 busybox 的代码就知道了
我猜 busybox 的代码里判断软连的文件名然后执行不同的代码
asxalex
2019-07-24 16:21:18 +08:00
@yangg 原来像这样直接写死的啊,谢谢


@gstqc 谢谢
podel
2019-07-24 16:32:26 +08:00
不管是 windows 还是 linux 你命令执行程序的时候, 第一个系统参数 是 你调用的命令的名字。
应该是通过这个实现的。
lihongjie0209
2019-07-24 16:35:57 +08:00
busybox 不是软连接吧, 每个程序都是 busybox, 只是名称不同, 默认参数不同.

skylancer
2019-07-24 16:39:13 +08:00
@lihongjie0209 linux 分区,谢谢茄子
asxalex
2019-07-24 16:39:46 +08:00
@podel 嗯,我还以为是写好程序之后,可以动态指定哪个软链执行哪个程序呢,原来是手工写死在程序里的


@lihongjie0209 软链过去之后,名称不同,但是都没有参数
0ZXYDDu796nVCFxq
2019-07-24 16:41:36 +08:00
asxalex
2019-07-24 16:53:08 +08:00
@gstqc 我还想一会有空的时候再去看源码呢,多谢~
Les1ie
2019-07-24 19:32:17 +08:00
PS:
iptables ip6tables 也是这样的,实际上是链接到了 xtables-multi
wweir
2019-07-24 22:37:59 +08:00
os.Args [ 0 ]
LGA1150
2019-07-24 23:59:20 +08:00
argv[0]
muzuiget
2019-07-25 00:59:12 +08:00
判断命令行第一个参数就是了,好多语言都支持。
AlynxZhou
2019-07-25 12:30:11 +08:00
学 C 的时候书上没说 argv[0] 是干啥的吗……建议把那本书撕了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/585823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX