@@ -235,13 +235,20 @@ func renderInitScript(shell shellutil.ShellType, cfg *config.Config, noRehash bo
235235 builder .WriteString ("if test -e $GOENV_RC_FILE\n " )
236236 builder .WriteString (" source $GOENV_RC_FILE\n " )
237237 builder .WriteString ("end\n " )
238- builder .WriteString ("if not contains $GOENV_ROOT/ shims $ PATH\n " )
239- builder .WriteString (" if test \" $GOENV_PATH_ORDER \" = \" back \" \n " )
240- builder .WriteString (" set -gx PATH $PATH $GOENV_ROOT/shims \n " )
241- builder .WriteString (" else \n " )
242- builder .WriteString (" set -gx PATH $GOENV_ROOT/shims $PATH \n " )
238+ builder .WriteString ("# Remove shims from PATH if present (to re-add in correct position) \n " )
239+ builder .WriteString ("set -l new_path \n " )
240+ builder .WriteString ("for p in $PATH\n " )
241+ builder .WriteString (" if test \" $p \" != \" $GOENV_ROOT/shims \" \n " )
242+ builder .WriteString (" set new_path $new_path $p \n " )
243243 builder .WriteString (" end\n " )
244244 builder .WriteString ("end\n " )
245+ builder .WriteString ("set -gx PATH $new_path\n " )
246+ builder .WriteString ("# Add shims directory to PATH in correct position\n " )
247+ builder .WriteString ("if test \" $GOENV_PATH_ORDER\" = \" back\" \n " )
248+ builder .WriteString (" set -gx PATH $PATH $GOENV_ROOT/shims\n " )
249+ builder .WriteString ("else\n " )
250+ builder .WriteString (" set -gx PATH $GOENV_ROOT/shims $PATH\n " )
251+ builder .WriteString ("end\n " )
245252 case shellutil .ShellTypePowerShell :
246253 fmt .Fprintf (& builder , "$env:GOENV_SHELL = \" %s\" \n " , shell )
247254 fmt .Fprintf (& builder , "$env:GOENV_ROOT = \" %s\" \n " , cfg .Root )
@@ -252,12 +259,13 @@ func renderInitScript(shell shellutil.ShellType, cfg *config.Config, noRehash bo
252259 builder .WriteString (" . $env:GOENV_RC_FILE\n " )
253260 builder .WriteString ("}\n " )
254261 shimsDir := filepath .Join (cfg .Root , "shims" )
255- builder .WriteString (fmt .Sprintf ("if ($env:PATH -notlike '*%s*') {\n " , shimsDir ))
256- builder .WriteString (" if ($env:GOENV_PATH_ORDER -eq 'back') {\n " )
257- builder .WriteString (fmt .Sprintf (" $env:PATH = \" $env:PATH;%s\" \n " , shimsDir ))
258- builder .WriteString (" } else {\n " )
259- builder .WriteString (fmt .Sprintf (" $env:PATH = \" %s;$env:PATH\" \n " , shimsDir ))
260- builder .WriteString (" }\n " )
262+ builder .WriteString ("# Remove shims from PATH if present (to re-add in correct position)\n " )
263+ builder .WriteString (fmt .Sprintf ("$env:PATH = ($env:PATH -split ';' | Where-Object { $_ -ne '%s' }) -join ';'\n " , shimsDir ))
264+ builder .WriteString ("# Add shims directory to PATH in correct position\n " )
265+ builder .WriteString ("if ($env:GOENV_PATH_ORDER -eq 'back') {\n " )
266+ builder .WriteString (fmt .Sprintf (" $env:PATH = \" $env:PATH;%s\" \n " , shimsDir ))
267+ builder .WriteString ("} else {\n " )
268+ builder .WriteString (fmt .Sprintf (" $env:PATH = \" %s;$env:PATH\" \n " , shimsDir ))
261269 builder .WriteString ("}\n " )
262270 case shellutil .ShellTypeCmd :
263271 fmt .Fprintf (& builder , "SET GOENV_SHELL=%s\n " , shell )
@@ -269,12 +277,14 @@ func renderInitScript(shell shellutil.ShellType, cfg *config.Config, noRehash bo
269277 builder .WriteString (" CALL \" %GOENV_RC_FILE%\" \n " )
270278 builder .WriteString (")\n " )
271279 shimsDir := filepath .Join (cfg .Root , "shims" )
272- builder .WriteString (fmt .Sprintf ("IF \" %%PATH:%s=%%\" == \" %%PATH%%\" (\n " , shimsDir ))
273- builder .WriteString (" IF \" %GOENV_PATH_ORDER%\" == \" back\" (\n " )
274- builder .WriteString (fmt .Sprintf (" SET PATH=%%PATH%%;%s\n " , shimsDir ))
275- builder .WriteString (" ) ELSE (\n " )
276- builder .WriteString (fmt .Sprintf (" SET PATH=%s;%%PATH%%\n " , shimsDir ))
277- builder .WriteString (" )\n " )
280+ builder .WriteString ("REM Remove shims from PATH if present (to re-add in correct position)\n " )
281+ builder .WriteString (fmt .Sprintf ("CALL SET PATH=%%PATH:%s;=%%\n " , shimsDir ))
282+ builder .WriteString (fmt .Sprintf ("CALL SET PATH=%%PATH:;%s=%%\n " , shimsDir ))
283+ builder .WriteString ("REM Add shims directory to PATH in correct position\n " )
284+ builder .WriteString ("IF \" %GOENV_PATH_ORDER%\" == \" back\" (\n " )
285+ builder .WriteString (fmt .Sprintf (" SET PATH=%%PATH%%;%s\n " , shimsDir ))
286+ builder .WriteString (") ELSE (\n " )
287+ builder .WriteString (fmt .Sprintf (" SET PATH=%s;%%PATH%%\n " , shimsDir ))
278288 builder .WriteString (")\n " )
279289 default :
280290 fmt .Fprintf (& builder , "export GOENV_SHELL=%s\n " , shell )
@@ -298,12 +308,23 @@ func renderInitScript(shell shellutil.ShellType, cfg *config.Config, noRehash bo
298308 builder .WriteString ("done <<< \" $PATH\" \n " )
299309 builder .WriteString ("export PATH=\" $_NEW_PATH\" \n " )
300310 builder .WriteString ("unset _NEW_PATH\n " )
301- builder .WriteString ("if [ \" ${PATH#*$GOENV_ROOT/shims}\" = \" ${PATH}\" ]; then\n " )
302- builder .WriteString (" if [ \" ${GOENV_PATH_ORDER:-front}\" = \" back\" ] ; then\n " )
303- builder .WriteString (" export PATH=\" ${PATH}:${GOENV_ROOT}/shims\" \n " )
304- builder .WriteString (" else\n " )
305- builder .WriteString (" export PATH=\" ${GOENV_ROOT}/shims:${PATH}\" \n " )
306- builder .WriteString (" fi\n " )
311+ builder .WriteString ("# Remove shims from PATH if present (to re-add in correct position)\n " )
312+ builder .WriteString ("_NEW_PATH=\" \" \n " )
313+ builder .WriteString ("while IFS=: read -ra PATHARRAY; do\n " )
314+ builder .WriteString (" for i in \" ${PATHARRAY[@]}\" ; do\n " )
315+ builder .WriteString (" case \" $i\" in\n " )
316+ builder .WriteString (" \" $GOENV_ROOT\" /shims) ;;\n " )
317+ builder .WriteString (" *) _NEW_PATH=\" ${_NEW_PATH}${_NEW_PATH:+:}$i\" ;;\n " )
318+ builder .WriteString (" esac\n " )
319+ builder .WriteString (" done\n " )
320+ builder .WriteString ("done <<< \" $PATH\" \n " )
321+ builder .WriteString ("export PATH=\" $_NEW_PATH\" \n " )
322+ builder .WriteString ("unset _NEW_PATH\n " )
323+ builder .WriteString ("# Add shims directory to PATH in correct position\n " )
324+ builder .WriteString ("if [ \" ${GOENV_PATH_ORDER:-front}\" = \" back\" ] ; then\n " )
325+ builder .WriteString (" export PATH=\" ${PATH}:${GOENV_ROOT}/shims\" \n " )
326+ builder .WriteString ("else\n " )
327+ builder .WriteString (" export PATH=\" ${GOENV_ROOT}/shims:${PATH}\" \n " )
307328 builder .WriteString ("fi\n " )
308329 }
309330
0 commit comments