export ARCHFLAGS='-arch i386 -arch x86_64'

2019-10-08 15:58:20 +08:00
 b00tyhunt3r

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

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

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

2264 次点击
所在节点    程序员
10 条回复
reus
2019-10-08 16:09:46 +08:00
难道不是 sudo 的效果?
sudo bash 是进入 root shell,具有所有权限
b00tyhunt3r
2019-10-08 16:11:48 +08:00
@reus 我也很费解 但确实和 sudo 无关
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
2019-10-08 18:52:58 +08:00
你怎样得知和 sudo 无关
b00tyhunt3r
2019-10-08 19:29:07 +08:00
@momocraft
因为我不键入神奇指令 export ARCHFLAGS='-arch i386 -arch x86_64'的情况下,
只简单执行 sudo bash 依然 permission denied
b00tyhunt3r
2019-10-08 19:31:22 +08:00
@ysc3839
大佬可以多说几句吗?
momocraft
2019-10-08 20:05:15 +08:00
你能寫出一個在別人機器復現此問題的步驟嗎
b00tyhunt3r
2019-10-08 20:18:05 +08:00
@momocraft 你是 OSX 系统吗?
/Library/WebServer/CGI-Executables
随便拖一个.c 文件进去 bash 编译看看
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
2019-10-08 22:21:25 +08:00
除非是你的编译脚本里有额外操作,直接用 clang 编译我觉得不会出任何问题……

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

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

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

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

© 2021 V2EX