【问题标题】:How to unset env variable on OS X?如何在 OS X 上取消设置环境变量?
【发布时间】:2014-05-02 15:29:39
【问题描述】:

我正在制定一个 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

【问题讨论】:

    标签: macos environment-variables porting


    【解决方案1】:

    使用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)
    

    【讨论】:

      猜你喜欢
      • 2011-10-10
      • 2017-07-08
      • 2013-11-27
      • 2011-11-22
      • 2014-05-15
      • 2012-03-15
      • 2015-11-28
      相关资源
      最近更新 更多