A feature-rich, POSIX-compatible shell implemented in Python with advanced scripting capabilities.
Project description
🐚 PyShell — A Feature-Rich POSIX-Compatible Shell in Python
A feature-rich, POSIX-compatible shell implemented in Python with advanced scripting capabilities.
Cross-platform and extensible, PyShell brings the power of Unix-style scripting to Python environments.
✨ Features
- POSIX Compatibility: Standard shell syntax (
if,while,for,case) - Advanced Arrays: Indexed and associative arrays
- Pipeline Support: Full pipe, redirection, and background job control
- Function Definitions: Shell functions with local variables
- Parameter Expansion:
${var:-default},${var#pattern}, etc. - Command Substitution:
$(command)and backtick syntax - Arithmetic Expansion:
$((expression))with full math operations - Brace Expansion:
{1..10},{a,b,c} - Glob Patterns:
*,?,[...]with extended matching - Built-in Commands: 50+ built-ins (
cd,echo,export,test,local, etc.) - Job Control: Background jobs with
fg/bg - History & Completion: Command history with readline integration
- Aliases: Command aliasing support
- Cross-Platform: Works on Linux, macOS, and Windows
🚀 Installation
<<<<<<< HEAD
From Source
git clone https://github.com/yogvidwankhede/PyShell.git
cd pyshell
pip install -e .
Using pip (once published)
=======
pip install pyshell-terminal
From Source
git clone https://github.com/yogvidwankhede/PyShell.git
cd PyShell
pip install -e .
📖 Usage
Interactive Mode
python main.py
Execute Command
python main.py -c "echo Hello World"
Run Script
python main.py script.sh
💡 Examples
Variables and Arrays
# Simple variables
name="PyShell"
echo $name
# Arrays
arr=(one two three)
echo ${arr[0]}
echo ${arr[@]}
# Associative arrays
declare -A config
config[host]="localhost"
config[port]=8080
echo ${config[host]}
Control Flow
# If statements
if [ -f "file.txt" ]; then
echo "File exists"
else
echo "File not found"
fi
# Loops
for i in {1..5}; do
echo "Count: $i"
done
# While loops
count=0
while [ $count -lt 5 ]; do
echo $count
count=$((count + 1))
done
Functions
greet() {
local name=$1
echo "Hello, $name!"
}
greet "World"
Pipelines and Redirection
# Pipes
cat file.txt | grep "pattern" | wc -l
# Redirection
echo "data" > output.txt
cat input.txt >> output.txt
command 2> errors.log
🏗️ Architecture
pyshell/
├── main.py # Entry point and REPL
├── pyshell/
│ ├── tokenizer.py # Lexical analysis
│ ├── parser.py # Syntax analysis
│ ├── executor.py # Command execution
│ ├── expansions.py # Variable/command expansion
│ ├── builtins.py # Built-in commands
│ ├── state.py # Global shell state
│ ├── ast_nodes.py # AST node definitions
│ ├── exceptions.py # Custom exceptions
│ └── utils.py # Utilities
└── tests/ # Test suite
🧪 Testing
python tests/run_all_tests.py
🤝 Contributing
Contributions are welcome! 🙌
- Fork the repository
- Create a feature branch
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m "Add some AmazingFeature"
- Push to your branch
git push origin feature/AmazingFeature
- Open a Pull Request
📝 Roadmap
- Tab completion improvements
- More POSIX test operators
- Process substitution
- Co-processes
- Additional shell options
- Performance optimizations
🙏 Acknowledgments
- Inspired by Bash, Zsh, and other Unix shells
- Built using Python’s
readlineandsubprocessmodules
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyshell_terminal-1.0.8.tar.gz.
File metadata
- Download URL: pyshell_terminal-1.0.8.tar.gz
- Upload date:
- Size: 52.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
764f0c31b3b5002173d13e662b2b4b876e003c4fe285a2fab466cfbf3fb81a56
|
|
| MD5 |
b07ad2ef83cff236ae3cac75f23c7a32
|
|
| BLAKE2b-256 |
efa1be2083eb1b176cb4f71bcdd78f2df90c4b2a916ef5f4b9bcdf132b47908f
|
File details
Details for the file pyshell_terminal-1.0.8-py3-none-any.whl.
File metadata
- Download URL: pyshell_terminal-1.0.8-py3-none-any.whl
- Upload date:
- Size: 42.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
282e2f89cbbfb225664607598ccdd68f42cea92cd0dd962ceb31a410644d54e6
|
|
| MD5 |
317794d3c3b4d45b3a0ea0ab88bcde81
|
|
| BLAKE2b-256 |
b5a2e29a0b5d463380a55d27961b3a10150f7f63dde80d2e8edd639c33c703ba
|