UNIX 的答案: execve
int execve(const char *filename,
char * const argv[], char * const envp[]);
execve 行为
filename
的程序argv
(v) 和环境变量 envp
(e)main()
的参数!“应用程序执行的环境”
env
命令查看PATH
: 可执行文件搜索路径PWD
: 当前路径HOME
: home 目录DISPLAY
: 图形输出PS1
: shell 的提示符export
: 告诉 shell 在创建子进程时设置环境变量export ARCH=x86_64-qemu
或 export ARCH=native
AM_HOME
终于破案了PATH
可执行文件搜索路径
[pid 28369] execve("/usr/local/sbin/as", ["as", "--64", ...
[pid 28369] execve("/usr/local/bin/as", ["as", "--64", ...
[pid 28369] execve("/usr/sbin/as", ["as", "--64", ...
[pid 28369] execve("/usr/bin/as", ["as", "--64", ...
PATH
里指定的顺序$ PATH="" /usr/bin/gcc a.c
gcc: error trying to exec 'as': execvp: No such file or directory
$ PATH="/usr/bin/" gcc a.c
计算机系统里没有魔法。机器永远是对的。