Skip to content

Fetching PATH from fish shell correctly. #171

@mhanberg

Description

@mhanberg

Ok, I might have found the culprit and of course I was wrong in my previous comment 🙈

I forgot to mention that I use fish as my shell and the returned PATH by this command {path, 0} = System.cmd(shell, ["-i", "-l", "-c", "cd #{root_path} && echo $PATH"]) is is space-separated and not colon-separated as in bash 👇

iex [17:38:47 :: 2] > root_path = "/Users/nicolognudi/code/personal/hello_world"
"/Users/nicolognudi/code/personal/hello_world"
iex [17:38:47 :: 3] > shell = System.get_env("SHELL")
"fish"
iex [17:38:47 :: 4] > {path, 0} = System.cmd(shell, ["-i", "-l", "-c", "cd #{root_path} && echo $PATH"])
{"/opt/homebrew/bin /opt/homebrew/sbin /Users/nicolognudi/.local/share/mise/installs/node/22.14.0/bin /Users/nicolognudi/.local/share/mise/installs/usage/0.3.0/bin /Users/nicolognudi/.local/share/mise/installs/python/3.12.4/bin /Users/nicolognudi/.local/share/mise/installs/elixir/1.18.2-otp-27/bin /Users/nicolognudi/.local/share/mise/installs/elixir/1.18.2-otp-27/.mix/escripts /Users/nicolognudi/.local/share/mise/installs/erlang/27.2/bin /Users/nicolognudi/.local/share/mise/installs/ruby/3.4.1/bin /Users/nicolognudi/.local/share/mise/installs/zig/0.14.1/bin /opt/homebrew/opt/fzf/bin /usr/local/bin /System/Cryptexes/App/usr/bin /usr/bin /bin /usr/sbin /sbin /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin /var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin /Applications/Wireshark.app/Contents/MacOS /Users/nicolognudi/.local/share/mise/installs/erlang/27.2/erts-15.2/bin /Users/nicolognudi/.cargo/bin /opt/homebrew/opt/mise/bin /Users/nicolognudi/.local/bin /Users/nicolognudi/dotfiles/bin /opt/homebrew/opt/libpq/bin\n",
 0}
iex [17:38:47 :: 5] > :os.find_executable(~c"elixir", to_charlist(path))
false

If I "rebuild" the path with colon between the entries (as in bash), the elixir executable is found:

iex [17:38:47 :: 9] > new_path = String.split(path, " ") |> Enum.join(":")
"/opt/homebrew/bin:/opt/homebrew/sbin:/Users/nicolognudi/.local/share/mise/installs/node/22.14.0/bin:/Users/nicolognudi/.local/share/mise/installs/usage/0.3.0/bin:/Users/nicolognudi/.local/share/mise/installs/python/3.12.4/bin:/Users/nicolognudi/.local/share/mise/installs/elixir/1.18.2-otp-27/bin:/Users/nicolognudi/.local/share/mise/installs/elixir/1.18.2-otp-27/.mix/escripts:/Users/nicolognudi/.local/share/mise/installs/erlang/27.2/bin:/Users/nicolognudi/.local/share/mise/installs/ruby/3.4.1/bin:/Users/nicolognudi/.local/share/mise/installs/zig/0.14.1/bin:/opt/homebrew/opt/fzf/bin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Applications/Wireshark.app/Contents/MacOS:/Users/nicolognudi/.local/share/mise/installs/erlang/27.2/erts-15.2/bin:/Users/nicolognudi/.cargo/bin:/opt/homebrew/opt/mise/bin:/Users/nicolognudi/.local/bin:/Users/nicolognudi/dotfiles/bin:/opt/homebrew/opt/libpq/bin\n"
iex [17:38:47 :: 10] > :os.find_executable(~c"elixir", to_charlist(new_path))
[47, 85, 115, 101, 114, 115, 47, 110, 105, 99, 111, 108, 111, 103, 110, 117,
 100, 105, 47, 46, 108, 111, 99, 97, 108, 47, 115, 104, 97, 114, 101, 47, 109,
 105, 115, 101, 47, 105, 110, 115, 116, 97, 108, 108, 115, 47, 101, 108, 105,
 120, ...]

If you wish I can open a different issue to track it.

Hope it help ✌️

Originally posted by @nickgnd in #59 (comment)

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions