~4 min read|
Whenever possible, I avoid using my mouse. This means I’m constantly on the lookout for efficiencies I can gain from operating within the command line (and why vim holds endless fascination for me, even if I haven’t yet made the time to master it). One of my favorite little efficiencies is opening up my text editor of choice (VS Code) from the command line:
$ code . # opens the current directory in VS Code
This only works, however, if you’ve previously configured
code to be part of Path.
The easiest way to do this is within VS Code itself by accessing the command palette (
⌘ + ⇧ + P) and searching for “Shell Command”:
Today, however, I was not satisfied with this working. I wanted to know how.
As I’d discovered when learning Rust, the [
PATH is really powerful and easily modifiable]((path-variable-modifying). Even better, it’s not nearly as daunting as I originally thought.
After running the installation and getting the “success” message from VS Code, I looked at my
$ echo $PATH
Alas, inspecting the printout to the console, nothing stood out as having changed!
It turns out that VS Code doesn’t get added directly to the
PATH. Instead, it gets added as a line to the
/usr/local/bin (knowing which path it got added to was a bit of guesswork). To see it, we can go to that location.
$ cd /usr/local/bin $ ls -la
Then, when we print out the directory’s contents, we see
code (and all of the other programs I have added to the
total 0 drwxrwxr-x 227 stephen admin 7264 Jul 12 13:14 . drwxr-xr-x 17 root wheel 544 Jun 10 18:45 .. -rw-r--r-- 1 stephen admin 0 Mar 12 07:27 .keepme lrwxr-xr-x 1 stephen admin 31 Apr 27 14:48 2to3 -> ../Cellar/python/3.7.7/bin/2to3 lrwxr-xr-x 1 stephen admin 35 Apr 27 14:48 2to3-3.7 -> ../Cellar/python/3.7.7/bin/2to3-3.7 lrwxr-xr-x 1 stephen admin 44 Mar 15 14:43 acorn2sfd -> ../Cellar/fontforge/20190801_1/bin/acorn2sfd lrwxr-xr-x 1 stephen admin 36 Apr 27 14:42 autoconf -> ../Cellar/autoconf/2.69/bin/autoconf lrwxr-xr-x 1 stephen admin 38 Apr 27 14:42 autoheader -> ../Cellar/autoconf/2.69/bin/autoheader lrwxr-xr-x 1 stephen admin 36 Apr 27 14:42 autom4te -> ../Cellar/autoconf/2.69/bin/autom4te lrwxr-xr-x 1 stephen admin 38 Apr 27 14:42 autoreconf -> ../Cellar/autoconf/2.69/bin/autoreconf lrwxr-xr-x 1 stephen admin 36 Apr 27 14:42 autoscan -> ../Cellar/autoconf/2.69/bin/autoscan lrwxr-xr-x 1 stephen admin 38 Apr 27 14:42 autoupdate -> ../Cellar/autoconf/2.69/bin/autoupdate lrwxr-xr-x 1 root admin 22 Apr 28 11:48 aws -> /usr/local/aws-cli/aws lrwxr-xr-x 1 root admin 32 Apr 28 11:48 aws_completer -> /usr/local/aws-cli/aws_completer lrwxr-xr-x 1 stephen admin 28 Mar 11 15:41 brew -> /usr/local/Homebrew/bin/brew lrwxr-xr-x 1 stephen admin 41 Apr 18 13:07 cairo-sphinx -> ../Cellar/cairo/1.16.0_3/bin/cairo-sphinx lrwxr-xr-x 1 stephen admin 40 Apr 18 13:07 cairo-trace -> ../Cellar/cairo/1.16.0_3/bin/cairo-trace lrwxr-xr-x 1 stephen admin 27 Mar 15 14:42 cjpeg -> ../Cellar/jpeg/9d/bin/cjpeg lrwxr-xr-x 1 stephen admin 39 Mar 12 07:28 clusterdb -> ../Cellar/postgresql/12.2/bin/clusterdb lrwxr-xr-x 1 stephen admin 68 Jul 11 12:40 code -> /Applications/Visual Studio Code.app/Contents/Resources/app/bin/code ...
What VS Code did then is actually create a symlink to its binary which is in the
/Applications/Visual Studio Code.app/Contents/Resources/app/bin/code.1
And with that, we can now understand how VS Code adds itself to
PATH without being explicitly listed. And, based on the length of the list - it’s a good thing too! The number of programs can grow quite large!
1 This is actually the first time I’d ever noticed that the first position of the long format for
ls could hold anything other than
-d. From the manual page on
ls, there are actually several options:
The entry type character describes the type of file, as follows:
b Block special file. c Character special file. d Directory. l Symbolic link. s Socket link. p FIFO. - Regular file.
Hi there and thanks for reading! My name's Stephen. I live in Chicago with my wife, Kate, and dog, Finn. Want more? See about and get in touch!