Running into OS ArgLength Limit when activating env with `hatch shell`
I'm running fish with starship. I've previously used virtualfish to manage python envs and wanted to give hatch a spin.
However, something's not right, it appears:
on ⛵ minikube (default) .../python-hcl2-terraform on main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None took 8m55s
🐟 ❯ hatch shell
exec: Failed to execute process '/usr/local/bin/starship': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/whoami': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/hostname': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/uptime': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/hostname': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/uname': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/git': An argument or exported variable exceeds the OS argument length limit.
deepbrook@ARCHIBALD ~/d/python-hcl2-terraform> source "/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish"
exec: Failed to execute process '/usr/bin/head': An argument or exported variable exceeds the OS argument length limit.
test: Missing argument at index 3
-lt 3
^
~/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish (line 63):
if test (echo $FISH_VERSION | head -c 1) -lt 3
^
from sourcing file ~/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish
exec: Failed to execute process '/usr/bin/git': An argument or exported variable exceeds the OS argument length limit.
exec: Failed to execute process '/usr/bin/basename': An argument or exported variable exceeds the OS argument length limit.
() deepbrook@ARCHIBALD ~/d/python-hcl2-terraform>
If I ctrl+d out of the shell it's all good again.
I cannot find anything inherently wrong with the activate.fish script being sourced, but I'm not well-versed in fish either.
Anyone here have an idea how to debug this? I wasn't able to dump any env vars due to the error so im a bit stumped here.
I'm on hatch 1.9.1 as per pip:
on ⛵ minikube (default) .../python-hcl2-terraform on main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None
🐟 ❯ pip show hatch
Name: hatch
Version: 1.9.1
Summary: Modern, extensible Python project management
Home-page:
Author:
Author-email: Ofek Lev <[email protected]>
License:
Location: /usr/local/lib/python3.10/dist-packages
Requires: click, hatchling, httpx, hyperlink, keyring, packaging, pexpect, platformdirs, rich, shellingham, tomli-w, tomlkit, userpath, virtualenv, zstandard
Required-by:
hatch version outputs 0.1.0, which seems weird:
on ⛵ minikube (default) .../python-hcl2-terraform on main +30 -3 [!] w 🐍 v3.10.12 ☁️ default on None
🐟 ❯ hatch version
0.1.0
Here's my activate.fish file, if it matters:
Here's my activate.fish file, if that helps.
```fish # This file must be used using `source bin/activate.fish` *within a running fish ( http://fishshell.com ) session*. # Do not run it directly.function _bashify_path -d "Converts a fish path to something bash can recognize" set fishy_path $argv set bashy_path $fishy_path[1] for path_part in $fishy_path[2..-1] set bashy_path "$bashy_path:$path_part" end echo $bashy_path end
function _fishify_path -d "Converts a bash path to something fish can recognize" echo $argv | tr ':' '\n' end
function deactivate -d 'Exit virtualenv mode and return to the normal environment.' # reset old environment variables if test -n "$_OLD_VIRTUAL_PATH" # https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx PATH (_fishify_path "$_OLD_VIRTUAL_PATH") else set -gx PATH $_OLD_VIRTUAL_PATH end set -e _OLD_VIRTUAL_PATH end
if test -n "$_OLD_VIRTUAL_PYTHONHOME"
set -gx PYTHONHOME "$_OLD_VIRTUAL_PYTHONHOME"
set -e _OLD_VIRTUAL_PYTHONHOME
end
if test -n "$_OLD_FISH_PROMPT_OVERRIDE"
and functions -q _old_fish_prompt
# Set an empty local `$fish_function_path` to allow the removal of `fish_prompt` using `functions -e`.
set -l fish_function_path
# Erase virtualenv's `fish_prompt` and restore the original.
functions -e fish_prompt
functions -c _old_fish_prompt fish_prompt
functions -e _old_fish_prompt
set -e _OLD_FISH_PROMPT_OVERRIDE
end
set -e VIRTUAL_ENV
if test "$argv[1]" != 'nondestructive'
# Self-destruct!
functions -e pydoc
functions -e deactivate
functions -e _bashify_path
functions -e _fishify_path
end
end
Unset irrelevant variables.
deactivate nondestructive
set -gx VIRTUAL_ENV '/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf'
https://github.com/fish-shell/fish-shell/issues/436 altered PATH handling
if test (echo $FISH_VERSION | head -c 1) -lt 3 set -gx _OLD_VIRTUAL_PATH (_bashify_path $PATH) else set -gx _OLD_VIRTUAL_PATH $PATH end set -gx PATH "$VIRTUAL_ENV"'/bin' $PATH
Unset $PYTHONHOME if set.
if set -q PYTHONHOME set -gx _OLD_VIRTUAL_PYTHONHOME $PYTHONHOME set -e PYTHONHOME end
function pydoc python -m pydoc $argv end
if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
# Copy the current fish_prompt function as _old_fish_prompt.
functions -c fish_prompt _old_fish_prompt
function fish_prompt
# Run the user's prompt first; it might depend on (pipe)status.
set -l prompt (_old_fish_prompt)
# Prompt override provided?
# If not, just prepend the environment name.
if test -n ''
printf '(%s) ' ''
else
printf '(%s) ' (basename "$VIRTUAL_ENV")
end
string join -- \n $prompt # handle multi-line prompts
end
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
end
</details>
Hey there, sorry for the trouble! Does it work if you manually run source "/home/deepbrook/.local/share/hatch/env/virtual/hcl2tf/DX5CXUQ6/hcl2tf/bin/activate.fish"?
The version command shows you the version of your project, to display the version of Hatch itself you would do hatch --version.