Android Platform Tools
#GET INFO
brew info android-platform-tools
My Homebrew installation (brew install --cask android-platform-tools) use this Path:
==> Artifacts
/usr/local/Caskroom/android-platform-tools/33.0.1/platform-tools/
/usr/local/Caskroom/android-platform-tools/30.0.0/platform-tools
You would be better off using the symlink that Homebrew creates to ANDROID_HOME, as it will always be the newest version:
/usr/local/opt/android-sdk/
So your PATH would be:
export PATH=$PATH:/usr/local/opt/android-sdk/tools:/usr/local/opt/android-sdk/platform-tools
SYSTEM PHP
brew install php@7.4 (max for NATS)
Install the required PHP to your PATH
also if you are using oh-my-zsh update path in your .zshrc export PATH="/usr/local/opt/php@7.3/bin:$PATH" and restart terminal –
Then make sure it's all working
php -v
php --version
This command will show you where your ini file is loaded
php --ini
cleanup steps
brew update && brew upgrade
brew tap homebrew/dupes
brew tap homebrew/versions
brew tap homebrew/homebrew-php
brew unlink php@56
brew install php@71
You might get an error if PHP 5.6 has not been installed by brew previously, but don't worry, you can simply continue.
You can also change the version to 7.0 by replacing the command from above commands from brew install php@71 to brew install php@70.
You can check the output by command.
php -v
If the output of php -v still doesn’t echoes the version 7, simply type this command and hit enter in terminal.
UPDATE PATH
export PATH=/usr/local/php5/bin:$PATH
Adding a new entry to the PATH variable in ZSH
I'm using zsh terminal, and I'm trying to add a new entry (/home/david/pear/bin
) to the PATH
variable. I don't see a reference to the PATH
variable in my ~/.zshrc
file, but doing echo $PATH
returns:
/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
So I know that the path variable is being set somewhere. Where is the PATH
variable set / modified for the zsh terminal?
In my opinion, PATH should be manipulated in .zshenv
, not in .zshrc
...
– Rmano
In case anyone else is curious about @Rmano's pointer on using '.zshenv' (as I was), here's link a detailed discussion.
– YCode
8 Answers
Sorted by: Highest score (default)
Actually, using ZSH allows you to use special mapping of environment variables. So you can simply do:
# append
path+=('/home/david/pear/bin')
# or prepend
path=('/home/david/pear/bin' $path)
# export to sub-processes (make it inherited by child processes)
export PATH
For me that's a very neat feature which can be propagated to other variables. Example:
typeset -T LD_LIBRARY_PATH ld_library_path :
Nice answer. In my case, ~/.zshrc
is sourced after .profile
, and overwrites everything in .profile
. Took a while pulling my hair to figure it out.
The append case does does not need the parens unless you're appending more than one element. It also often doesn't need the quotes. So the simple, short way to append is
@SuperUberDuper, you should understand that almost any unix shell simply reads startup files which does almost the same as if you'd type it into shell interactively. Regarding "rc" files you might find interesting answer to this question
– ony
It's possible to avoid explicit export with -x
and leave only unique values in a variable with -U
, colon is assumed by default, so it can be: typeset -TUx PATH path
– Grief
1
I see the use of path
and PATH
, both are separate entities?
@CousinCocaine, you are right. ZSH variables are case-sensitive. typeset -T
allows to tie PATH
and path
together in a special way that internally ZSH manages array variable path
and reflects its contents in PATH
as a scalar.
– ony
How do I set exactly what PATH should be, as opposed to appending to it? Because every time .zshrc
is executed, PATH gets whatever is declared in .zshrc
appended to it again and again.
@DanielSpringer, there is a hint in second example. By just writing path=(...)
you get it set. You might be interested as well in comment from @Grief about -U
. And I'd recommend modifying PATH
environment from ~/.*profile
-like files so they will not execute when you run inner shell. See also something like shreevatsa.wordpress.com/2008/03/30/… or other similar tips.
– ony
It seems that "path=" appends to path rather then setting it. What I didn't know is that path is reset upon relaunching Terminal/Shell/(maybe?)Login session
3
@DanielSpringer, no. If you want it in those terms then: path=(...)
(without referencing $path
or $PATH
inside) assigns, path=(... $path)
prepends and path+(...)
appends.
– ony
You can even have it as 1-liner: export path=(... $path)
.
– caram
This doesn't work for me on my mac. I use the one liner answer below that updates ~/.zshrc insead.
– Randy
@KhanhNguyen how can I see when these files are sourced? Is there a cmd?
– Timo
1
@Timo, in case of zsh you can try something like zsh -x -i -l -c true
to see all commands during shell start-up. That -l
is to simulate login-like start (as it happens from text VT or over ssh
). But you should understand that not always zsh
will be started as login (e.g. graphical session) and some other parent process may somehow source .profile
before spawning non-login zsh
sub-process that inherits environment variables (including PATH
) from parent process.
– ony
1
What if i want to use $HOME inside ' '? path +=('$HOME/etc/etc') doesn't seem to work
– Rotkiv
1
@Rotkiv, that's a bit different question about how single/double quotes are interpreted. I guess zsh expansion covers this. Usually double-quotes allow string interpolation like "$HOME/etc/etc"
, but single quotes makes it easier to represent text that should not get special treatment. Note that you can always mix in a single argument forms to have something like "$HOME"'/etc/etc'
(double + single quotes) or "$HOME"/etc/etc
(double quotes + unquoted). P.S. Yes I'm lazy to try find link to good answer on SO 😛
– ony
On macOS, you can prepend and append to your path variable as described in the post, adding to the .zshrc file. It works without exporting the PATH.
– Jost
If this append or prepend syntax doesn't work for you, make sure that you are using lower case path
. Lower case path
is the array.
– Yerke
Thank you for showing the prepend as well! Didn't see it anywhere else.
– MEMark
This does not seem to work with ~
.
This didn't work for me even though things looked absolutely fine when I echo $PATH
. I had to go back to the "traditional" syntax of something like: export PATH=$ANDROID_HOME/platform-tools:$PATH
– Phil
1
@MinhNghĩa, ~
is expanded by shell. If you put it in quotes like '~/bin'
or "~/bin"
it will be literally tilda in your path. E.g. you can write path+=(~/bin)
(note no quotes) or similar. If you need to quote something, you still can do it on part like path+=(~/'some path with spaces')
.
– ony
@Phil, my best guess for your case is that ok result of echo $PATH
shows your current shell value for it. Any chance it works if you do export PATH
(upper case) to export for sub-process after setting path
(lower case)?
– ony
Here, add this line to .zshrc
:
export PATH=/home/david/pear/bin:$PATH
EDIT: This does work, but ony's answer below is better, as it takes advantage of the structured interface ZSH provides for variables like $PATH
. This approach is standard for bash
, but as far as I know, there is no reason to use it when ZSH provides better alternatives.
Here, add this line to .zshrc
:
export PATH=/home/david/pear/bin:$PATH
EDIT: This does work, but ony's answer below is better, as it takes advantage of the structured interface ZSH provides for variables like $PATH
. This approach is standard for bash
, but as far as I know, there is no reason to use it when ZSH provides better alternatives.
1
My .zshrc already had a line for export PATH so I replaced it with the modified one.
6
I had to remove the double quotes around the entries i.e.
PATH="/home/david/pear/bin:/usr/bin:etc"
toPATH=/home/david/pear/bin:/usr/bin:etc
for it to stay in zshrc.– a7omiton
4
@taco, you can use $HOME
– mencargo
It will erase all the old PATH, try
export PATH=$PATH:/path/to/dir
– sstruct
This appends to my existing PATH, and every time it's run, appends again. How do I set exactly what PATH should be?
You can set
PATH
directly @DanielSpringer:export PATH=/some/where:/bin:/usr/bin
and so on. Is that what you're asking? The idea is to run the code in this answer in the.zshrc
or.profile
or something like that at the beginning of each session.– Linuxios
1
@DanielSpringer: Yes. When you open a shell it inherits
PATH
from the parent process that started it, and then when it runs.zshrc
(or.bashrc
or whatever), that's what lets you add extra things to that path.– Linuxios
@DanielSpringer: Worth noting that you have to add the folder they're in to your path, not the path to the script file itself.
– Linuxios
@Linuxios Ah, and do I need to add the path to the file itself too, or just its folder?
Just the folder.
PATH
is a list of places (folders; directories) where the shell will look for commands you try to run. For example, when you runwget ...
the shell is looking for and finding thewget
binary in/usr/bin
, for example, which is in the defaultPATH
.– Linuxios
Just a side note, if your path has a space in it. then you need to wrap your path in double quotes like this:
export PATH=$PATH:"/Applications/Android Studio.app/Contents"
haha forget it, I though that was only a console command but adding that line to the .zshrc did the trick. Thanks a lot!
ANSWER 2
You can append to your PATH
in a minimal fashion. No need for parentheses unless you're appending more than one element. It also usually doesn't need quotes. So the simple, short way to append is:
path+=/some/new/bin/dir
This lower-case syntax is using path
as an array, yet also affects its upper-case partner equivalent, PATH
(to which it is "bound" via typeset
).
(Notice that no :
is needed/wanted as a separator.)
Common interactive usage
Then the common pattern for testing a new script/executable becomes:
path+=$PWD/.
# or
path+=$PWD/bin
Common config usage
You can sprinkle path settings around your .zshrc
(as above) and it will naturally lead to the earlier listed settings taking precedence (though you may occasionally still want to use the "prepend" form path=(/some/new/bin/dir $path)
).
Related tidbits
Treating path
this way (as an array) also means: no need to do a rehash
to get the newly pathed commands to be found.
Also take a look at vared path
as a dynamic way to edit path
(and other things).
You may only be interested in path
for this question, but since we're talking about exports and arrays, note that arrays generally cannot be exported.
You can even prevent PATH
from taking on duplicate entries (refer to this and this):
typeset -U path
PATH pre-populated
The reason your path already has some entries in it is due to your system shell files setting path for you. This is covered in a couple other posts:
- Why and where the $PATH env variable is set?
- Where is the source of $PATH? I cannot find it in .zshrc
answered Jun 11, 2015 at 22:11
Should it not be 'path+=:/foo/bar'? (with a colon)
@andrewlorien I updated the answer with details about the colon separator.
Note that if there’s a comment after the path, then we do need quotes, like
path+='my/path' # for fun
. It’s obvious if you have spaces, but not so much if you have comments."(Notice that no : is needed/wanted as a separator.)" This is only true for a lowercase
path
. A preceding:
is required forPATH
, as follows in .zshrcPATH+=:/Users/path/to/my/folder
For ZSH to interpret $PATH as an array and make it unique, I believe the correct way would be
typeset -aU path
one liner, without opening ~/.zshrc
file
echo -n 'export PATH=~/bin:$PATH' >> ~/.zshrc
or
echo -n 'export PATH=$HOME/bin:$PATH' >> ~/.zshrc
To see the effect, do source ~/.zshrc
in the same tab or open a new tab
answered Dec 13, 2017 at 14:26
Worked perfecly on OSX with Zsh shell.
– Stryker
Worked like a charm!
– Akbarsha
Added path to ~/.zshrc
sudo vi ~/.zshrc
add new path
export PATH="$PATH:[NEW_DIRECTORY]/bin"
Update ~/.zshrc
Save ~/.zshrc
source ~/.zshrc
Check PATH
answered Jul 10, 2019 at 3:43
This is the Bash
way.
effective way to do
20
OPTION 1: Add this line to ~/.zshrc:
export "PATH=$HOME/pear/bin:$PATH"
After that you need to run source ~/.zshrc
in order your changes to take affect OR close this window and open a new one
OPTION 2: execute it inside the terminal console to add this path only to the current terminal window session. When you close the window/session, it will be lost.
Follow
answered May 8, 2018 at 12:12
1,68355 gold badges2929 silver badges4747 bronze badges
Can you elaborate on how this answer is different from the same answer posted 5 years ago?
1
in this answer it is not said that you have to add this line of code to the file, if you just run it like that it will change only in the current windows and this is not explain in the original answer
– Dimitar
1
for me PATH=$PATH:/path/to/file/bin
then export PATH
worked. to check echo $PATH
. other solutions are adding the path temporarily.
Follow
answered Oct 30, 2021 at 13:26
9188 bronze badges
0
to verify your new directory has been added correctly, you can use
print -l $path
thanks to the fact that its type is known to be an array
brew install php@7.4 –
Because it is now versioned