A .NET library providing a fluent, human-readable API for executing shell commands from C# code.
Sheller is a .NET library that provides a fluent, human-readable API for executing shell commands from C# code. It solves the problem of cumbersome and error-prone shell command execution by offering a chainable interface similar to LINQ, allowing developers to build complex shell scripts with the safety and expressiveness of C#.
.NET developers who need to interact with shell commands, scripts, or external tools from within their C# applications, particularly those building DevOps tools, automation scripts, or cross-platform utilities.
Developers choose Sheller for its intuitive fluent API, immutability for safe reuse, and extensibility for wrapping complex command-line tools, making shell interactions more maintainable and less error-prone than raw process calls.
A .NET library that makes shelling out commands super easy and fluent.
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Offers a chainable, LINQ-like interface for building commands, making scripts intuitive as shown in examples like UseShell<Bash>().WithEnvironmentVariable(...).UseExecutable<Echo>().
Commands and shells are immutable, allowing safe reuse and chaining without side effects, demonstrated in the 'Reusable Objects' section with separate environment variable instances.
Supports timeouts, cancellation tokens, custom result selectors, and no-throw error handling, providing fine-grained control over command execution and error management.
Enables custom IShell and IExecutable implementations, such as the kubectl wrapper example, making it adaptable to wrap complex command-line tools with type-safe APIs.
Only ships with Bash and Echo by default; other shells or tools require custom extensions, adding development effort for common use cases.
Creating custom executables involves implementing interfaces and handling cloning logic, which can be cumbersome for simple wrappers compared to ad-hoc solutions.
The immutable fluent design and observable streams may introduce latency compared to raw Process.Start calls, especially in high-frequency command execution scenarios.