V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
b00tyhunt3r
V2EX  ›  程序员

export ARCHFLAGS='-arch i386 -arch x86_64'

  •  
  •   b00tyhunt3r · 2019-10-08 15:58:20 +08:00 · 2351 次点击
    这是一个创建于 1878 天前的主题,其中的信息可能已经有所发展或是发生改变。

    因为权限问题没法在目录下编译生成可执行文件( OSX )

    敲入上面这句神奇命令后,sudo bash,一切限制都不复存在只留下原地懵逼的我

    有大佬能一个词一个词的讲解一下这句神秘指令的原理吗?

    10 条回复    2019-10-08 22:21:25 +08:00
    reus
        1
    reus  
       2019-10-08 16:09:46 +08:00 via Android
    难道不是 sudo 的效果?
    sudo bash 是进入 root shell,具有所有权限
    b00tyhunt3r
        2
    b00tyhunt3r  
    OP
       2019-10-08 16:11:48 +08:00
    @reus 我也很费解 但确实和 sudo 无关
    ysc3839
        3
    ysc3839  
       2019-10-08 18:19:54 +08:00
    ```
    $ export ARCHFLAGS='-arch i386 -arch x86_64'
    $ env | grep ARCH
    ARCHFLAGS=-arch i386 -arch x86_64
    $ sudo bash
    # env | grep ARCH
    #
    ```
    sudo 并不会保留环境变量。
    momocraft
        4
    momocraft  
       2019-10-08 18:52:58 +08:00
    你怎样得知和 sudo 无关
    b00tyhunt3r
        5
    b00tyhunt3r  
    OP
       2019-10-08 19:29:07 +08:00 via iPad
    @momocraft
    因为我不键入神奇指令 export ARCHFLAGS='-arch i386 -arch x86_64'的情况下,
    只简单执行 sudo bash 依然 permission denied
    b00tyhunt3r
        6
    b00tyhunt3r  
    OP
       2019-10-08 19:31:22 +08:00 via iPad
    @ysc3839
    大佬可以多说几句吗?
    momocraft
        7
    momocraft  
       2019-10-08 20:05:15 +08:00
    你能寫出一個在別人機器復現此問題的步驟嗎
    b00tyhunt3r
        8
    b00tyhunt3r  
    OP
       2019-10-08 20:18:05 +08:00
    @momocraft 你是 OSX 系统吗?
    /Library/WebServer/CGI-Executables
    随便拖一个.c 文件进去 bash 编译看看
    nyanyh
        9
    nyanyh  
       2019-10-08 22:19:51 +08:00
    /Library/WebServer/CGI-Executables
    ❯ clang++ ./sort.cpp -o sort -std=c++11
    ld: can't open output file for writing: sort, errno=13 for architecture x86_64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)

    /Library/WebServer/CGI-Executables
    ❯ sudo clang++ ./sort.cpp -o sort -std=c++11
    (此处编译成功)

    /Library/WebServer/CGI-Executables
    ❯ sudo bash

    The default interactive shell is now zsh.
    To update your account to use zsh, please run `chsh -s /bin/zsh`.
    For more details, please visit https://support.apple.com/kb/HT208050.
    bash-3.2# ls
    sort sort.cpp
    bash-3.2# clang++ ./sort.cpp -std=c++11
    bash-3.2#

    我认为你这个问题不能复现的概率接近 100%,sudo 不保留环境变量,这个目录单纯是因为没有权限才导致的无法编译,和环境变量没有关系
    nyanyh
        10
    nyanyh  
       2019-10-08 22:21:25 +08:00
    除非是你的编译脚本里有额外操作,直接用 clang 编译我觉得不会出任何问题……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5425 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 08:30 · PVG 16:30 · LAX 00:30 · JFK 03:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.