แงแแแแแแแแแแแแแพแแกแพแแแแ Python แแแแแถแแแแแแแแแแแ แแทแแแแแพแแแถแ shell scripts แแถแแฝแแแนแแแถแแแแแพแแแพแแขแแแแแแแแ แแทแแแถแแแแแแแแแแแแถแแขแแปแแแแถแแแแแแแแแแแแแแแแแทแ แแแขแแแแแถแแแขแแแแขแแทแแแแแแแแแแแแแพ shell scripts แแนแแแถแแแแแแแถแแแแทแ แแ แแถแแขแแทแแแแแแแแผแ แแถแแถแแแแแถแแแแแแผแแขแแแแแแแพ Git แแถแแแแแแแกแพแแแทแแแผแ IDE แแทแแแถแแแแแแแแแแแแผแแแแแถแแแทแแแแแแแ
- แแถแแแแแพแแแพแ Script แขแแแแแแแแ: แแปแแแ แแทแแแแแพแแแถแ
.sh
scripts แแธแแshell_file/
แแถแแแแถแแแถแแแแแฝแแแแแแแแพแ แแแปแ แแแแแถแแแแแผแแปแแแทแแแแปแแแแแแแแถแแ - แแถแแแแแแแแแแแแถแแขแแปแแแแถแแแแแแแแแแแแแแแแแท: แแแแพแฑแแแแแแพแฑแแ scripts แขแถแ แแแแพแแแถแแแถแแแปแแแแแแแแพแแแถแ แแถแแถแแถแแแแแพแแแถแแแแผแแ
- แแถแแแแแ แแแถแแขแแปแแแแถแแ แแแพแ: แงแแแแแแแแแแแฝแแแแแพแแแแธแแแแพแฑแแ shell scripts แแถแแแขแแแขแถแ แแแแพแแแถแแแถแแแถแแฝแแแนแแแถแแแแแแถแแแแถแแแแปแ แฌแแปแแแแแ
- แแปแแแแแทแแถแ แแทแแขแแถแแทแ: แแแแแแแแแพแแปแแแแแแแแถแแแแแแผแแแถแแขแแปแแแแถแ แแแแแแแแแแแแ แปแแแแถแแแแผแแแถแแฝแแแนแแแถแแแแ แปแแ แแแถแแแแถแแแ
- แแถแแแฝแแแแแ
แผแ
uv
: แแแแพแแแถแแแแถแแแแผแแแถแแฝแแแนแ uv Python package manager แแแแแถแแแแถแแขแแทแแแแแแ Python แแแแพแแ - แแถแแแปแแแแแแแแแแฝแ: แแถแแแถแแแแ keyboard แแแแแแแแถแแฝแแแนแแแแแฝแแแแแแถแแแแถแแแปแแแ แแทแแแถแแแแแพแแแพแแ
sh_manager/
โโโ main.py # แ
แแแปแ
แ
แผแแแแแแแทแแธแแแ
โโโ make_executable.py # แงแแแแแแแถแแขแแปแแแแถแแ
แแแพแ
โโโ pyproject.toml # แแถแแแแแแแแ
แแถแแแแแแแแ แแทแแแถแแแนแแแแขแแแแแแแแ
โโโ uv.lock # แฏแแแถแ lock แแแแแถแแ uv package manager
โโโ data/
โ โโโ git_user_configs.json # แแถแแแแแแแแ
แแถแแแแแแแแแขแแแแแแแพ Git
โโโ shell_file/
โโโ switch_git_user.sh # แงแแแแแแแแแถแแแแแแผแแขแแแแแแแพ Git
โโโ reset_intellijidea.sh # Script แแแแแแกแพแแแทแแแผแ IntelliJ IDEA
โโโ reset_navicate.sh # Script แแแแแแกแพแแแทแแแผแ Navicat database
- macOS แแแแแปแแแแแ: แงแแแแแแแแแแแแผแแแถแแแ แแถแกแพแแแแแแถแแ macOS แแแแแปแแแแแ
- Python 3.11.11 แฌแแแแแแแถแ
- uv package manager (แแแแถแ)
- Clone แฌแแถแแแ repository แแแ
- แ แผแแแ แแถแแแแแแแแแแ
- แแแกแพแแแถแแแนแแแแขแแแแแแแแแพ uv:
uv sync
แ แถแแแแแแพแแงแแแแแแแแแแแแแแ shell script แขแแแแแแแแ:
# แแแแพ uv
uv run main.py
# แฌแแแกแพแ แแทแแแแแพแแแถแแแถ script
uv run sh-manager
แแแแพแฑแแ shell scripts แแถแแแขแแแขแถแ แแแแพแแแถแแแถแแแแแปแแแแแ:
# แแแแพ uv
uv run make_executable.py
# แฌแแแกแพแ แแทแแแแแพแแแถแแแถ script
uv run make-executable
แแแแถแแแแแแผแแแแถแแแถแแแแแแแแ
แแถแแแแแแแแแขแแแแแแแพ Git แแแแแแแแแแถแแแแแแแแแแแแปแ data/git_user_configs.json
แ
แแถแแแแแแแแ แแถแแแแแแแแแแ แแ แปแแแแแแ:
@username
([email protected])@username2
([email protected])
แแแแแแกแพแแแทแแแผแแแถแแแแแแ แแทแ cache แแแแ IntelliJ IDEAแ แแถแแแแแแแแแแแแแแถแแแแแแแแแถแแแแแ แถ IDEแ
แแแแแแกแพแแแทแแแผแแแถแแแแแแแแถแแแแแแถแแแแผแแแแแถแแแทแแแแแแ Navicat แแทแ cacheแ
แงแแแแแ reset_intellijidea.sh
แขแถแ
แแแแแแกแพแแแทแแแถแแแแแแแแแแแแทแแธ JetBrains แแผแ
แแถ:
- IntelliJ IDEA - Java IDE
แงแแแแแ reset_navicate.sh
แขแถแ
แแแแแแกแพแแแทแแแถแ:
- Navicat Premium (แแแแถแแ 15, 16, 17) - แงแแแแแแแแแแแแแแแแผแแแแแถแแแทแแแแแแ
- แแถแแแแแแแแ แแถแแแแแแแแ แแทแ cache
- แแถแแแปแแแแแแแแถแแถแแแแแ
- แแถแแแแแแแกแพแแแทแแแผแแแถแแแแแแแขแแแแแแแพแแแแถแแ
- แแถแแแปแแฏแแแถแ preferences แแทแ plist
แแแแแแทแแธแแแแแแ แแแปแ แแแแแถแแแแแผแแปแแแทแแแแปแแแแแแแแถแ:
- แแแแฝแ โ/โ: แแปแแแแแแถแ scripts
- แแแแฝแ โ: แแแแพแแแพแ script (แแถแแแแแพแแแพแแแแผแแปแแแทแแแแป)
- Enter: แแแแพแแแถแ script แแแแแถแแแแแพแแแพแ
- q: แ แถแแ แแแแธแแแแแแทแแธ
แงแแถแ แแแแ แแแปแ แแแแแถแแ:
แแแแพ โ/โ แแพแแแแธแแแแถแแแแธ, โ แแพแแแแธแแแแพแแแพแ, Enter แแพแแแแธแแแแพแแแถแ, q แแพแแแแธแ
แถแแ
แแแ
> [x] switch_git_user.sh
[ ] reset_intellijidea.sh
[ ] reset_navicate.sh
แแปแแแแแแแแแแฝแแ แแแแพแแแพแแแแ โ, แแแแพแแแถแแแแ Enter, แ
แถแแ
แแแแแ qแ
แแแแแแแฝแ data/git_user_configs.json
แแพแแแแธแแแแแแ แฌแแแแแแ profile แขแแแแแแแพ Git:
แ
แแแถแ: แแแแแทแแแพแฏแแแถแ git_user_configs.json
แแทแแแถแแแ แแผแแ
แแแแแแธ data/git_user_configs_example.json
แแ
data/git_user_configs.json
แแทแแแแแแแแฝแแแถแแแแแแผแแแถแแแแแแขแแแแ
[
{
"name": "แแแแแแแแแแขแแแ",
"email": "email.แแแแแขแแแ@example.com"
}
]
- แแถแแ
.sh
script แแแแแขแแแแแแแปแแแshell_file/
- แแแแผแแแแแถแแแแถ script แแถแ shebang แแแแนแแแแแผแ (
#!/bin/bash
) แแทแแแถแแขแแปแแแแถแ - Script แแนแแแแแ แถแแแแแแแแแแแแแแแแแทแแแแปแแ แแแปแ แแแแแถแแแแแแพแแแพแ
- แแถแแแแแแถแแแแถแแขแแปแแแแถแ: แแแแแแแแแพแแปแแแแแแแแพแฑแแแฏแแแถแแขแถแ แแแแพแแแถแแแถแ
- แแถแแแแแแแแแแแแแ แปแ: แแถแแแแแแแแแแแแแ แปแแแแถแแแแผแแแถแแฝแแแนแแแถแแแแ แปแแ แแแถแแแแถแแ
- แแถแแแแแพแแแถแแแถแแแปแแแแแทแแถแ: Scripts แแแแพแแแถแแแแแปแแแแทแแแแถแแแแแแแแแแแแแแแถแ
- แแถแแแแแแแแแแถแแแแถแแแแแ แผแ: แแถแแแแแแแแแแถแแแแแแนแแแแแผแแแผแแแถแแแแแ แผแแแแแแขแแแแแแแพ
# แแแกแพแแแถแแแนแแแแขแแแขแแทแแแแแแ
uv sync
# แแแแพแแแถแแแแแแแทแแธแแแ
uv run main.py
# แแแแพแแแถแแงแแแแแแแถแแขแแปแแแแถแ
uv run make_executable.py
- Python 3.11.11+: แแปแแแถแ แแทแแแแแพแแแถแ Python แแแแพแ
- Standard Library แแแแแปแแแแแ: แแทแแแแแผแแแถแแแถแแแนแแแแขแแแแถแแแแแ
- uv: แแถแแแแแแแแแแ package Python แแแแพแ
แแแแแแแแแแแบแแถ open source แแทแแแถแแแถแแฝแแขแถแแแแถแแแแแ MITแ
- Fork repository
- แแแแแพแ feature branch
- แแแแพแแถแแแแแถแแแแแแผแแแแแแขแแแ
- แแแแพแแแแแแแแถแแ แแแแแ แแ
- แแถแแแแแแพ pull request
Script แแทแแขแถแ แแแแพแแแถแแแถแ:
- แแแแพแแแถแ
uv run make-executable
แแพแแแแธแแแแ แแแถแแขแแปแแแแถแ - แฌแแแแพแแแถแแแแแแ
chmod +x shell_file/your_script.sh
แแถแแขแแปแแแแถแแแแแผแแแถแแแแทแแแ:
- แแแแผแแแแแถแแแแถแขแแแแแถแแแถแแขแแปแแแแถแแแแแแแแ
แแ
shell_file/
- แแทแแทแแแแแพแแแถ script files แแทแแแแแแถ read-only
Script แแทแแแแแผแแแถแแแแแพแ:
- แแแแแแแแแถแแแแถ script แแถแแแ
แแแแปแแแ
shell_file/
- แแทแแทแแแแแพแแแถ file แแถแ extension
.sh
แแแแแถแแแแแแ แถ แแแแฝแ แฌแแถแแแฝแแ แแแแ แแผแแแพแ issue แแ แแพ repository แแแแแแแ
A Python-based tool for managing and running shell scripts with interactive selection and automatic permission handling. Perfect for developers who frequently use shell scripts for development tasks like Git user switching, IDE resets, and database management.
- Interactive Script Selection: Easily browse and run
.sh
scripts from theshell_file/
directory using an intuitive radio-button interface. - Automatic Permission Handling: Prompts to make scripts executable before running, ensuring smooth execution.
- Bulk Permission Setup: One-time utility to make all shell scripts executable with batch or individual confirmation.
- Safe & Secure: Always asks before changing permissions; handles errors gracefully with proper error messages.
uv
Integration: Works seamlessly with the uv Python package manager for modern Python development.- Arrow Key Navigation: Full keyboard support with arrow keys for navigation and selection.
sh_manager/
โโโ main.py # Main application entry point
โโโ make_executable.py # Bulk permission utility
โโโ pyproject.toml # Project configuration and dependencies
โโโ uv.lock # Lock file for uv package manager
โโโ data/
โ โโโ git_user_configs.json # Git user configurations
โโโ shell_file/
โโโ switch_git_user.sh # Git user switching utility
โโโ reset_intellijidea.sh # IntelliJ IDEA reset script
โโโ reset_navicate.sh # Navicat database reset script
- macOS Only: This tool is designed specifically for macOS
- Python 3.11.11 or higher
- uv package manager (recommended)
- Clone or download this repository
- Navigate to the project directory
- Install dependencies using uv:
uv sync
Start the interactive shell script manager:
# Using uv
uv run main.py
# Or install and run as a script
uv run sh-manager
Make all shell scripts executable at once:
# Using uv
uv run make_executable.py
# Or install and run as a script
uv run make-executable
Switches between different Git user configurations defined in data/git_user_configs.json
.
Current configurations:
@username
([email protected])@username2
([email protected])
Resets IntelliJ IDEA settings and caches. Useful for resolving IDE issues.
Resets Navicat database connection settings and caches.
The reset_intellijidea.sh
tool can reset all JetBrains applications including:
- IntelliJ IDEA - Java IDE
The reset_navicate.sh
tool can reset:
- Navicat Premium (Versions 15, 16, 17) - Database management tool
- Settings and cache reset
- Trial period reset
- User configuration reset
- Preferences and plist file cleanup
The application provides an intuitive radio-button interface:
- โ/โ Arrow Keys: Navigate between scripts
- โ Arrow Key: Select a script (radio button selection)
- Enter: Run the selected script
- q: Quit the application
Example interface:
Use โ/โ to move, โ to select, Enter to run, q to quit.
> [x] switch_git_user.sh
[ ] reset_intellijidea.sh
[ ] reset_navicate.sh
Navigate with arrow keys. Select with โ, run with Enter, quit with q.
Edit data/git_user_configs.json
to add or modify Git user profiles:
Note: If the git_user_configs.json
file doesn't exist, copy from data/git_user_configs_example.json
to data/git_user_configs.json
and modify according to your needs.
[
{
"name": "Your Name",
"email": "[email protected]"
}
]
- Place your
.sh
script in theshell_file/
directory - Make sure the script has proper shebang (
#!/bin/bash
) and permissions - The script will automatically appear in the selection interface
- Permission Confirmation: Always asks before making files executable
- Error Handling: Graceful error handling with informative messages
- Safe Execution: Scripts run in a controlled environment
- Input Validation: Proper validation of user inputs
# Install development dependencies
uv sync
# Run the main application
uv run main.py
# Run the permission utility
uv run make_executable.py
- Python 3.11.11+: Modern Python features and performance
- Standard Library Only: No external dependencies required
- uv: Modern Python package management
This project is open source and available under the MIT License.
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Script not executable:
- Run
uv run make-executable
to set up permissions - Or manually run
chmod +x shell_file/your_script.sh
Permission denied:
- Ensure you have write permissions to the
shell_file/
directory - Check that the script files are not read-only
Script not found:
- Verify the script exists in the
shell_file/
directory - Check that the file has a
.sh
extension
For issues, questions, or contributions, please open an issue on the project repository.