Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mac OS X 10.9 - setting permanent environment variables

How do I set a permanent environment variable (i.e. one that does not need exporting every time I start a new Terminal session) in Mac OS X 10.9? I've found a number of answers about modifying my .bash_profile and .profile, however neither of these options seem to work as permanent solutions - only temporary. The variable I'm trying to set is MULE_HOME. I have the following line in my bash profile:

export MULE_HOME=$(/opt/mule-standalone-3.4.0)

However, when I start Terminal I get the following line (not sure if this is normal behaviour?):

-bash: /opt/mule-standalone-3.4.0: is a directory

And running a simple env command returns the following:

TERM_PROGRAM=Apple_Terminal
SHELL=/bin/bash
TERM=xterm-256color
TMPDIR=/var/folders/fc/68bqp4jj411gynj5qvwhq6z1shs1fy/T/
Apple_PubSub_Socket_Render=/tmp/launch-xKtkql/Render
TERM_PROGRAM_VERSION=326
TERM_SESSION_ID=E97BFE4B-AF85-4933-B252-0883CC085349
USER=dan
SSH_AUTH_SOCK=/tmp/launch-rEmTWW/Listeners
__CF_USER_TEXT_ENCODING=0x730C85DE:0:0
PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
__CHECKFIX1436934=1
PWD=/Users/dan
JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_51.jdk/Contents/Home
LANG=en_GB.UTF-8
MULE_HOME=
SHLVL=1
HOME=/Users/dan
LOGNAME=danwiseman
_=/usr/bin/env

In order to get around this I'm currently having to type export MULE_HOME=/opt/mule-standalone-3.4.0 every time I start a new Terminal session which, whilst not strenuous, is a little inconvenient. What am I doing wrong here that is causing the variable to only be set temporarily? Thanks in advance.

like image 933
danw Avatar asked Mar 19 '14 10:03

danw


People also ask

How do I set environment variables permanently?

To make permanent changes to the environment variables for all new accounts, go to your /etc/skel files, such as . bashrc , and change the ones that are already there or enter the new ones. When you create new users, these /etc/skel files will be copied to the new user's home directory.

Does OSX have environment variables?

The shell uses environment variables to store information, such as the name of the current user, the name of the host computer, and the default paths to any commands.


3 Answers

Just did this really easy and quick. First create a ~/.bash_profile from terminal:

touch ~/.bash_profile

then

open -a TextEdit.app ~/.bash_profile

add

export TOMCAT_HOME=/Library/Tomcat/Home

Save document in TextEdit and you are done.

like image 156
CodeOverRide Avatar answered Oct 11 '22 08:10

CodeOverRide


Drop the $(...) bit, which would attempt to execute the command within the brackets and set $MULE_HOME to whatever it produces. In your case /opt/mule-standalone-3.4.0 is not an executable, hence the error you are getting.

export MULE_HOME=/opt/mule-standalone-3.4.0

and use ~/.bashrc not ~/.bash_profile.

EDIT: It seems opinion is that you should set environment variables in your ~/.bash_profile script, and not ~/.bashrc script.

like image 39
trojanfoe Avatar answered Oct 11 '22 10:10

trojanfoe


MacOS 10.15 Catalina and Newer

In case anyone on MacOS 10.15 (Catalina) and up come here, you need to use a .zshenv file instead of .bash_profile. This is because by default since Catalina, the terminal uses zhs instead of bash.

Export paths permanently in the following manner:

  1. Create .zshenv file:

touch ~/.zshenv

  1. Next, open it with the following command:

open -a TextEdit.app ~/.zshenv

  1. Type out the export you want to do in this format:

export NAME=path ex: export PICO_SDK_PATH=/Users/[redacted]/Developer/pico-sdk

like image 7
Jonathan Avatar answered Oct 11 '22 08:10

Jonathan