fix(shell): prevent pager hangs in non-interactive mode #362
+32
−0
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Fixes the "WARNING: terminal is not fully functional" issue that causes the shell tool to hang indefinitely when running pager-based commands (like
git diff,git log,man, etc.) in non-interactive mode.Related Issues
Fixes #360
Root Cause
The
CommandExecutor.execute_with_pty()method was not setting theTERMenvironment variable in the child process. When commands spawn pagers likeless, the pager:Solution
TERMenvironment variable: SetsTERM=xterm-256colorif not already set, enabling proper terminal capability detectionGIT_PAGER,PAGER, andMANPAGERtocatto bypass pagers entirely when running non-interactivelyChanges
src/strands_tools/shell.py: Add environment setup in child process before executing commandtests/test_shell.py: Add test to verify the fix is in placeTesting
test_command_executor_sets_pager_env_in_non_interactiveChecklist
ruff checkandruff formatType of Change