我正在制作一个makefile规则,希望在递归调用make之前先取消设置环境变量MAKEFILES。在其他BSD系统上,我这样做是这样的:
env -u MAKEFLAGS $(MAKE) $(SUBDIR_ARGS)
在Linux上,我这样做是这样的:
env --unset=MAKEFLAGS $(MAKE) $(SUBDIR_ARGS)
但是,两种风格都不能在Macintosh OS X Mavericks上使用,尽管,我希望其他地方使用的BSD风格也可以使用。
我通过BSD样式调用得到的错误是:
env: illegal option -- u
在OS X上调用命令之前,如何设置环境变量?为什么其他地方使用的BSD样式不起作用?
这是Mac的env手册页:
ENV(1) BSD General Commands Manual ENV(1)
NAME
env -- set and print environment
SYNOPSIS
env [-i] [name=value ...] [utility [argument ...]]
DESCRIPTION
env executes utility after modifying the environment as specified on the command line. The option name=value specifies an environmental variable, name, with a value of value. The option `-i' causes env to completely ignore the environment it inherits.
If no utility is specified, env prints out the names and values of the variables in the environment, with one name=value pair per line.
DIAGNOSTICS
If the utility is invoked, the exit status of env shall be the exit status of utility; otherwise, the env utility exits with one of the following values:
0 The env utility completed successfully
1-125 An error occurred in the env utility.
126 The utility specified by utility was found, but could not be invoked.
127 The utility specified by utility could not be found.
COMPATIBILITY
The historic - option has been deprecated but is still supported in this implementation.
SEE ALSO
execvp(3), environ(7)
STANDARDS
The env utility conforms to IEEE Std 1003.2-1992 (``POSIX.2'').
BUGS
env doesn't handle commands with equal (``='') signs in their names, for obvious reasons.
BSD August 27, 1993 BSD
最佳答案
使用unset
命令。从man pages:
unset
Remove variable or function names - the opposite of set.
Syntax
unset [-fv] [name ...]
Key
-v Each name refers to a shell variable.(default)
-f Each name refers to a shell function, and the function definition is removed.
Example
$ unset myvariable
Each unset variable or function is removed from the environment passed to subsequent commands. If any of RANDOM, SECONDS, LINENO, HISTCMD, FUNCNAME, GROUPS, or DIRSTACK are unset, they lose their special properties, even if they are subsequently reset.
The exit status is true unless a name is readonly. It is not an error for nothing to be unset.
unset is a bash built in command.
"Look Dave, I can see you're really upset about this" ~ HAL (Space 2001)
关于macos - 如何在OS X上取消设置环境变量?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22623563/