Skip to main content

sh-expand

A python library for expanding shell ASTs that can be used to construct sound analyses for shell scripts (after having expanded the AST).

Design

There are two implementations of shell expansion:

  1. expand.py does an in-python expansion of simple & safe AST nodes. It doesn't support bashisms.
  2. bash_expand.py expands by conservatively echoing safe commands to a bash process containing the current shell state.

Both, when called via expand_command, recurse down into the words of a shasta AST node to expand, leave the word as is, or raise an ExpansionError. Examples:

  • Process substitutions are unsafe.
  • Simple variable substitutions are safe.
  • Assignments are considered unsafe, since in Pash they indicate an unparallelizable region.

expand.py interprets the ArgChars libdash parses (ex: for variable and process substitutions) to check and expand words.

Libbash does not parse ArgChars, so bash_expand.py instead conservatively checks for the presence of potentially expandable or unsafe literal characters (see should_expand_var) before expanding.

Not having proper ArgChar parsing causes false positive unsafe errors, so expand.py should eventually be extended to support bash-only AST nodes, and libbash and shasta extended to parse ArgChars.

Metadata

Release files for sh-expand 0.2.6

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for sh-expand 0.2.6
File Interpreter ABI Platform
sh_expand-0.2.6-py3-none-any.whl Python 3 none any Details

Release files / sh_expand-0.2.6-py3-none-any.whl

Download URL sh_expand-0.2.6-py3-none-any.whl
Size 16.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dcc72c732b204729eda9330b077f4f23378bf0681877863f9009cba72ac0fae7
BLAKE2b-256 checksum
How to use checksums
f91756d6d67b407035de6718571ef9d01d5e9224b265c885f573be868f1df8dd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.7

Release history Release notifications | RSS feed

This release

0.2.6 This release

1 release file

0.2.3

1 release file

0.2.1

1 release file

0.2.0

1 release file

0.1.7

1 release file

0.1.5

1 release file

0.1.3

1 release file

0.1.1

1 release file

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page