如题,在 busybox 中,busybox 命令会被软链到 ls,又被软链到 wc,但是在执行软链 ls 和 wc 的时候,输出(命令的作用)又是不同的,请教一下大佬们,这个咋实现的?
想在 google 里面搜索的,但是不知道咋表达,也没找到有用的信息。
bash
if [ "$(basename $0)" = 'wc' ] then
看 busybox 的代码就知道了
我猜 busybox 的代码里判断软连的文件名然后执行不同的代码
原来像这样直接写死的啊,谢谢
谢谢
不管是 windows 还是 linux 你命令执行程序的时候, 第一个系统参数 是 你调用的命令的名字。
应该是通过这个实现的。
busybox 不是软连接吧, 每个程序都是 busybox, 只是名称不同, 默认参数不同.
linux 分区,谢谢茄子
嗯,我还以为是写好程序之后,可以动态指定哪个软链执行哪个程序呢,原来是手工写死在程序里的
软链过去之后,名称不同,但是都没有参数
参考 https://busybox.net/FAQ.html/>https://github.com/antonyantony/busybox/blob/master/libbb/appletlib.c/>这里定义了所有的功能
https://github.com/antonyantony/busybox/blob/master/include/applets.h
这里是各种功能的实现,所以 busybox 和 gnu 的工具的参数是有较大差异的
https://github.com/antonyantony/busybox/tree/master/coreutils
https://github.com/antonyantony/busybox/tree/master/findutils
https://github.com/antonyantony/busybox/tree/master/modutils
https://github.com/antonyantony/busybox/tree/master/miscutils
我还想一会有空的时候再去看源码呢,多谢~
PS:
iptables ip6tables 也是这样的,实际上是链接到了 xtables-multi
os.Args [ 0 ]
argv[0]
判断命令行第一个参数就是了,好多语言都支持。
学 C 的时候书上没说 argv[0] 是干啥的吗……建议把那本书撕了……