V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
asxalex
V2EX  ›  Linux

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

  •  
  •   asxalex · 2019-07-24 16:06:02 +08:00 · 4274 次点击
    这是一个创建于 1931 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    14 条回复    2019-07-25 12:30:11 +08:00
    yangg
        1
    yangg  
       2019-07-24 16:13:55 +08:00   ❤️ 1
    bash

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


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

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


    @lihongjie0209 软链过去之后,名称不同,但是都没有参数
    asxalex
        9
    asxalex  
    OP
       2019-07-24 16:53:08 +08:00
    @gstqc 我还想一会有空的时候再去看源码呢,多谢~
    Les1ie
        10
    Les1ie  
       2019-07-24 19:32:17 +08:00
    PS:
    iptables ip6tables 也是这样的,实际上是链接到了 xtables-multi
    wweir
        11
    wweir  
       2019-07-24 22:37:59 +08:00 via Android
    os.Args [ 0 ]
    LGA1150
        12
    LGA1150  
       2019-07-24 23:59:20 +08:00
    argv[0]
    muzuiget
        13
    muzuiget  
       2019-07-25 00:59:12 +08:00
    判断命令行第一个参数就是了,好多语言都支持。
    AlynxZhou
        14
    AlynxZhou  
       2019-07-25 12:30:11 +08:00
    学 C 的时候书上没说 argv[0] 是干啥的吗……建议把那本书撕了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   999 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 21:16 · PVG 05:16 · LAX 13:16 · JFK 16:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.