<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Farouk Bello</title>
    <description>The latest articles on DEV Community by Farouk Bello (@maverick_3_0).</description>
    <link>https://dev.to/maverick_3_0</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3784820%2F7972b4e7-11d8-4aeb-93cb-4a3a5dc2b578.png</url>
      <title>DEV Community: Farouk Bello</title>
      <link>https://dev.to/maverick_3_0</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/maverick_3_0"/>
    <language>en</language>
    <item>
      <title>Stop Spanning export PATH Everywhere: Optimize Your Shell Config</title>
      <dc:creator>Farouk Bello</dc:creator>
      <pubDate>Sat, 28 Feb 2026 16:12:49 +0000</pubDate>
      <link>https://dev.to/maverick_3_0/stop-spanning-export-path-everywhere-optimize-your-shell-config-p6f</link>
      <guid>https://dev.to/maverick_3_0/stop-spanning-export-path-everywhere-optimize-your-shell-config-p6f</guid>
      <description>&lt;p&gt;Are you new to Linux? Is your shell config cluttered with export lines at the top, middle, and end? If you type &lt;code&gt;echo $PATH | tr ':' '\n'&lt;/code&gt; and see a wall of duplicate paths, you’re doing it the hard way.&lt;/p&gt;

&lt;p&gt;For those just starting out: your shell config files (like &lt;code&gt;.bashrc&lt;/code&gt; or &lt;code&gt;.zshrc&lt;/code&gt;) are hidden files that control &lt;strong&gt;environment variables&lt;/strong&gt;. The most important one is &lt;code&gt;PATH&lt;/code&gt;—the list of directories where your terminal searches for commands (like &lt;code&gt;node&lt;/code&gt; or &lt;code&gt;python&lt;/code&gt;). Scattered &lt;code&gt;export PATH&lt;/code&gt; lines make this list messy and hard to debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Common Mess (What You're Probably Doing Now)
&lt;/h2&gt;

&lt;p&gt;Most guides tell you to add a tool to your path by appending an export line to your ~/.bashrc (Linux) or ~/.zshrc (macOS). Over time, it looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.local/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;           &lt;span class="c"&gt;# Local user bins&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm/versions/node/v20/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;  &lt;span class="c"&gt;# Node.js from nvm&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.pyenv/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;           &lt;span class="c"&gt;# Python from pyenv&lt;/span&gt;


&lt;span class="c"&gt;# New tool&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/new-tool/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# And in some cases you might be required to create environment variables&lt;/span&gt;
&lt;span class="c"&gt;# Environment variable for JAVA (NEW)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/java"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$JAVA_HOME&lt;/span&gt;&lt;span class="s2"&gt;/bin:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# Environment variable for Android Sdk (NEW)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANDROID_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/android/Sdk"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ANDROID_HOME&lt;/span&gt;&lt;span class="s2"&gt;/platform_tools:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ANDROID_HOME&lt;/span&gt;&lt;span class="s2"&gt;/build_tools:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="c"&gt;# .... repeats for every new tool, cluttering your file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The issues with this approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Redundancy&lt;/strong&gt;: You repeat &lt;code&gt;$PATH&lt;/code&gt; constantly, risking a circular reference or a broken string.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Readability:&lt;/strong&gt; It’s hard to see the "priority" of your tools at a glance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clutter:&lt;/strong&gt; Your config file grows to 50+ lines of repetitive code very quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Quick check:&lt;/strong&gt; Open your config with &lt;code&gt;nano ~/.bashrc&lt;/code&gt; (or ~/.zshrc), search for "PATH". Is it a mess?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Tip: You can reload your shell anytime &lt;code&gt;source ~/.bashrc&lt;/code&gt; or &lt;code&gt;source ~/.zshrc&lt;/code&gt; after adding a new environment variable or path variable.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Arrays are Better
&lt;/h2&gt;

&lt;p&gt;The &lt;code&gt;PATH&lt;/code&gt; is just a colon-separated string: &lt;code&gt;/usr/bin:/home/user/bin&lt;/code&gt;. Linux searches this string from &lt;strong&gt;left to right&lt;/strong&gt;. If you have two versions of a tool, the one appearing first in the string wins.&lt;/p&gt;

&lt;p&gt;By using an &lt;strong&gt;array&lt;/strong&gt;, we can manage our paths as a clean, numbered list and join them together at the very end.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Clean Solution
&lt;/h2&gt;

&lt;p&gt;Instead of multiple exports, use this block at the end of your config file. It separates the &lt;strong&gt;variables&lt;/strong&gt; from the &lt;strong&gt;list&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;## Define Environment Variables&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/java"&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;ANDROID_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/android/Sdk"&lt;/span&gt;

&lt;span class="c"&gt;## Consolidate into a Path Array&lt;/span&gt;
&lt;span class="c"&gt;# NB: In Zsh, the 'path' array is automatically linked to 'PATH'&lt;/span&gt;
&lt;span class="nv"&gt;my_paths&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.local/bin"&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.nvm/versions/node/v20/bin"&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.pyenv/bin"&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/new-tool/bin"&lt;/span&gt; &lt;span class="c"&gt;# New tool&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$JAVA_HOME&lt;/span&gt;&lt;span class="s2"&gt;/bin"&lt;/span&gt;     &lt;span class="c"&gt;# Java binaries&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ANDROID_HOME&lt;/span&gt;&lt;span class="s2"&gt;/platform_tools"&lt;/span&gt; &lt;span class="c"&gt;# Android platform binaries&lt;/span&gt;
    &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$ANDROID_HOME&lt;/span&gt;&lt;span class="s2"&gt;/build_tools"&lt;/span&gt;    &lt;span class="c"&gt;# Android build tool binaries&lt;/span&gt;
&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="c"&gt;# This way you can handle the order&lt;/span&gt;

&lt;span class="c"&gt;## The Logic&lt;/span&gt;
&lt;span class="c"&gt;# If you are using ZSH (Mac default), just add this:&lt;/span&gt;
&lt;span class="nv"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=(&lt;/span&gt;&lt;span class="nv"&gt;$my_paths&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;@] &lt;span class="nv"&gt;$path&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="nb"&gt;export &lt;/span&gt;PATH

&lt;span class="c"&gt;# If you are using BASH (Linux default), use this instead:&lt;/span&gt;
&lt;span class="k"&gt;for &lt;/span&gt;p &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;my_paths&lt;/span&gt;&lt;span class="p"&gt;[@]&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do
    &lt;/span&gt;&lt;span class="nv"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="s2"&gt;:&lt;/span&gt;&lt;span class="nv"&gt;$PATH&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;done
&lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Pro-Tip:&lt;/strong&gt; Always backup your config before editing:&lt;br&gt;
&lt;code&gt;cp ~/.bashrc ~/.bashrc.backup&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrap-Up
&lt;/h2&gt;

&lt;p&gt;Ditch 20+ messy exports for one readable array. Your shell config stay clean as you add tools—perfect for Linux/MacOS newcomers. Test it, share it with your friends, and drop a comment with your wins!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does your PATH look like? Drop a comment below if this helped you clean up your terminal!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>coding</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
