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

2019 年 7 月 24 日
 asxalex

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

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

5032 次点击
所在节点    Linux
14 条回复
yangg
2019 年 7 月 24 日
bash

if [ "$(basename $0)" = 'wc' ] then
0ZXYDDu796nVCFxq
2019 年 7 月 24 日
看 busybox 的代码就知道了
我猜 busybox 的代码里判断软连的文件名然后执行不同的代码
asxalex
2019 年 7 月 24 日
@yangg 原来像这样直接写死的啊,谢谢


@gstqc 谢谢
podel
2019 年 7 月 24 日
不管是 windows 还是 linux 你命令执行程序的时候, 第一个系统参数 是 你调用的命令的名字。
应该是通过这个实现的。
lihongjie0209
2019 年 7 月 24 日
busybox 不是软连接吧, 每个程序都是 busybox, 只是名称不同, 默认参数不同.

skylancer
2019 年 7 月 24 日
@lihongjie0209 linux 分区,谢谢茄子
asxalex
2019 年 7 月 24 日
@podel 嗯,我还以为是写好程序之后,可以动态指定哪个软链执行哪个程序呢,原来是手工写死在程序里的


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

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

https://study.congcong.us/t/585823

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

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

© 2021 V2EX