命令 "PWD=/proc/self/cwd another_executable " 是什么意思?
What does the command "PWD=/proc/self/cwd another_executable " mean?
构建 AOSP 9.0 时。0_r30 使用这些命令的源代码:
$ make clean
$ make showcommands -j8 > ~/BuildAndroid.txt
在 ~/BuildAndoird.txt:
中有这样的命令行
[ 58% 62374/106553] PWD=/proc/self/cwd prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++ ........
我想这是一个bash命令,但为什么在"prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++"之前有"PWD=/proc/self/cwd"和一个space(不是;或&&)?这是什么意思,我认为 bash 是不合法的,因为 space 表示以下文本是参数而不是命令。
另一个问题是,什么是“/proc/self/cwd”,是标准的proc节点吗?
一些实验:
$ VAR=123
$ VAR=456 echo $VAR
123
$ echo $VAR
123
所以这确实是合法的,但这是什么意思?
它执行命令
prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++
但是在为此命令设置环境时,它将环境变量 PWD
设置为值 /proc/self/cwd
。请注意,这仅影响 clang++
进程的环境,而不影响 shell 脚本的 environment/variable space。
再试一次:
VAR=123
VAR=456 echo $VAR
123
好的,但是:
VAR=456 /bin/sh -c 'echo $VAR'
456
POSIX变量$PWD
$PWD
将指向当前目录
echo $PWD; ls -l /proc/self/cwd
/home/user
lrwxrwxrwx 1 user user 0 mar 26 09:18 /proc/self/cwd -> /home/user
这样做将确保设置 $PWD
,因为 android 根本不需要它们。
构建 AOSP 9.0 时。0_r30 使用这些命令的源代码:
$ make clean
$ make showcommands -j8 > ~/BuildAndroid.txt
在 ~/BuildAndoird.txt:
中有这样的命令行[ 58% 62374/106553] PWD=/proc/self/cwd prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++ ........
我想这是一个bash命令,但为什么在"prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++"之前有"PWD=/proc/self/cwd"和一个space(不是;或&&)?这是什么意思,我认为 bash 是不合法的,因为 space 表示以下文本是参数而不是命令。
另一个问题是,什么是“/proc/self/cwd”,是标准的proc节点吗?
一些实验:
$ VAR=123
$ VAR=456 echo $VAR
123
$ echo $VAR
123
所以这确实是合法的,但这是什么意思?
它执行命令
prebuilts/clang/host/linux-x86/clang-4691093/bin/clang++
但是在为此命令设置环境时,它将环境变量 PWD
设置为值 /proc/self/cwd
。请注意,这仅影响 clang++
进程的环境,而不影响 shell 脚本的 environment/variable space。
再试一次:
VAR=123
VAR=456 echo $VAR
123
好的,但是:
VAR=456 /bin/sh -c 'echo $VAR'
456
POSIX变量$PWD
$PWD
将指向当前目录
echo $PWD; ls -l /proc/self/cwd
/home/user
lrwxrwxrwx 1 user user 0 mar 26 09:18 /proc/self/cwd -> /home/user
这样做将确保设置 $PWD
,因为 android 根本不需要它们。