@fredlackey/devutils 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -5
- package/package.json +1 -1
- package/src/commands/install.js +374 -36
- package/src/installs/adobe-creative-cloud.js +527 -25
- package/src/installs/adobe-creative-cloud.md +605 -0
- package/src/installs/appcleaner.js +303 -26
- package/src/installs/appcleaner.md +699 -0
- package/src/installs/apt-transport-https.js +390 -0
- package/src/installs/apt-transport-https.md +678 -0
- package/src/installs/atomicparsley.js +624 -26
- package/src/installs/atomicparsley.md +795 -0
- package/src/installs/aws-cli.js +779 -26
- package/src/installs/aws-cli.md +727 -0
- package/src/installs/balena-etcher.js +688 -26
- package/src/installs/balena-etcher.md +761 -0
- package/src/installs/bambu-studio.js +912 -26
- package/src/installs/bambu-studio.md +780 -0
- package/src/installs/bash-completion.js +554 -23
- package/src/installs/bash-completion.md +833 -0
- package/src/installs/bash.js +399 -26
- package/src/installs/bash.md +993 -0
- package/src/installs/beyond-compare.js +585 -26
- package/src/installs/beyond-compare.md +813 -0
- package/src/installs/build-essential.js +511 -26
- package/src/installs/build-essential.md +977 -0
- package/src/installs/ca-certificates.js +618 -0
- package/src/installs/ca-certificates.md +937 -0
- package/src/installs/caffeine.js +490 -26
- package/src/installs/caffeine.md +839 -0
- package/src/installs/camtasia.js +577 -25
- package/src/installs/camtasia.md +762 -0
- package/src/installs/chatgpt.js +458 -26
- package/src/installs/chatgpt.md +814 -0
- package/src/installs/chocolatey.js +447 -0
- package/src/installs/chocolatey.md +661 -0
- package/src/installs/chrome-canary.js +472 -26
- package/src/installs/chrome-canary.md +641 -0
- package/src/installs/chromium.js +645 -26
- package/src/installs/chromium.md +838 -0
- package/src/installs/claude-code.js +558 -26
- package/src/installs/claude-code.md +1173 -0
- package/src/installs/curl.js +361 -26
- package/src/installs/curl.md +714 -0
- package/src/installs/cursor.js +561 -26
- package/src/installs/cursor.md +970 -0
- package/src/installs/dbschema.js +674 -26
- package/src/installs/dbschema.md +925 -0
- package/src/installs/dependencies.md +435 -0
- package/src/installs/development-tools.js +600 -0
- package/src/installs/development-tools.md +977 -0
- package/src/installs/docker.js +1010 -25
- package/src/installs/docker.md +1109 -0
- package/src/installs/drawio.js +1001 -26
- package/src/installs/drawio.md +795 -0
- package/src/installs/elmedia-player.js +328 -25
- package/src/installs/elmedia-player.md +556 -0
- package/src/installs/ffmpeg.js +870 -25
- package/src/installs/ffmpeg.md +852 -0
- package/src/installs/file.js +464 -0
- package/src/installs/file.md +987 -0
- package/src/installs/gemini-cli.js +793 -26
- package/src/installs/gemini-cli.md +1153 -0
- package/src/installs/git.js +382 -26
- package/src/installs/git.md +907 -0
- package/src/installs/gitego.js +931 -26
- package/src/installs/gitego.md +1172 -0
- package/src/installs/go.js +913 -26
- package/src/installs/go.md +958 -0
- package/src/installs/google-chrome.js +801 -25
- package/src/installs/google-chrome.md +862 -0
- package/src/installs/gpg.js +412 -73
- package/src/installs/gpg.md +1056 -0
- package/src/installs/homebrew.js +1015 -26
- package/src/installs/homebrew.md +988 -0
- package/src/installs/imageoptim.js +950 -26
- package/src/installs/imageoptim.md +1119 -0
- package/src/installs/installers.json +2297 -0
- package/src/installs/jq.js +382 -26
- package/src/installs/jq.md +809 -0
- package/src/installs/keyboard-maestro.js +701 -26
- package/src/installs/keyboard-maestro.md +825 -0
- package/src/installs/latex.js +771 -26
- package/src/installs/latex.md +1095 -0
- package/src/installs/lftp.js +338 -26
- package/src/installs/lftp.md +907 -0
- package/src/installs/lsb-release.js +346 -0
- package/src/installs/lsb-release.md +814 -0
- package/src/installs/messenger.js +829 -26
- package/src/installs/messenger.md +900 -0
- package/src/installs/microsoft-office.js +550 -26
- package/src/installs/microsoft-office.md +760 -0
- package/src/installs/microsoft-teams.js +782 -25
- package/src/installs/microsoft-teams.md +886 -0
- package/src/installs/node.js +886 -26
- package/src/installs/node.md +1153 -0
- package/src/installs/nordpass.js +698 -26
- package/src/installs/nordpass.md +921 -0
- package/src/installs/nvm.js +977 -26
- package/src/installs/nvm.md +1057 -0
- package/src/installs/openssh.js +734 -64
- package/src/installs/openssh.md +1056 -0
- package/src/installs/pandoc.js +644 -26
- package/src/installs/pandoc.md +1036 -0
- package/src/installs/pinentry.js +492 -26
- package/src/installs/pinentry.md +1142 -0
- package/src/installs/pngyu.js +851 -26
- package/src/installs/pngyu.md +896 -0
- package/src/installs/postman.js +781 -26
- package/src/installs/postman.md +940 -0
- package/src/installs/procps.js +425 -0
- package/src/installs/procps.md +851 -0
- package/src/installs/safari-tech-preview.js +355 -25
- package/src/installs/safari-tech-preview.md +533 -0
- package/src/installs/sfnt2woff.js +640 -26
- package/src/installs/sfnt2woff.md +795 -0
- package/src/installs/shellcheck.js +463 -26
- package/src/installs/shellcheck.md +1005 -0
- package/src/installs/slack.js +722 -25
- package/src/installs/slack.md +865 -0
- package/src/installs/snagit.js +566 -25
- package/src/installs/snagit.md +844 -0
- package/src/installs/software-properties-common.js +372 -0
- package/src/installs/software-properties-common.md +805 -0
- package/src/installs/spotify.js +858 -25
- package/src/installs/spotify.md +901 -0
- package/src/installs/studio-3t.js +803 -26
- package/src/installs/studio-3t.md +918 -0
- package/src/installs/sublime-text.js +780 -25
- package/src/installs/sublime-text.md +914 -0
- package/src/installs/superwhisper.js +687 -25
- package/src/installs/superwhisper.md +630 -0
- package/src/installs/tailscale.js +727 -26
- package/src/installs/tailscale.md +1100 -0
- package/src/installs/tar.js +389 -0
- package/src/installs/tar.md +946 -0
- package/src/installs/termius.js +780 -26
- package/src/installs/termius.md +844 -0
- package/src/installs/terraform.js +761 -26
- package/src/installs/terraform.md +899 -0
- package/src/installs/tidal.js +752 -25
- package/src/installs/tidal.md +864 -0
- package/src/installs/tmux.js +328 -26
- package/src/installs/tmux.md +1030 -0
- package/src/installs/tree.js +393 -26
- package/src/installs/tree.md +833 -0
- package/src/installs/unzip.js +460 -0
- package/src/installs/unzip.md +879 -0
- package/src/installs/vim.js +403 -26
- package/src/installs/vim.md +1040 -0
- package/src/installs/vlc.js +803 -26
- package/src/installs/vlc.md +927 -0
- package/src/installs/vscode.js +825 -26
- package/src/installs/vscode.md +1002 -0
- package/src/installs/wget.js +415 -0
- package/src/installs/wget.md +791 -0
- package/src/installs/whatsapp.js +710 -25
- package/src/installs/whatsapp.md +854 -0
- package/src/installs/winpty.js +352 -0
- package/src/installs/winpty.md +620 -0
- package/src/installs/woff2.js +535 -26
- package/src/installs/woff2.md +977 -0
- package/src/installs/wsl.js +572 -0
- package/src/installs/wsl.md +699 -0
- package/src/installs/xcode-clt.js +520 -0
- package/src/installs/xcode-clt.md +351 -0
- package/src/installs/xcode.js +542 -26
- package/src/installs/xcode.md +573 -0
- package/src/installs/yarn.js +806 -26
- package/src/installs/yarn.md +1074 -0
- package/src/installs/yq.js +636 -26
- package/src/installs/yq.md +944 -0
- package/src/installs/yt-dlp.js +683 -26
- package/src/installs/yt-dlp.md +946 -0
- package/src/installs/yum-utils.js +297 -0
- package/src/installs/yum-utils.md +648 -0
- package/src/installs/zoom.js +740 -25
- package/src/installs/zoom.md +884 -0
- package/src/scripts/README.md +567 -45
- package/src/scripts/STATUS.md +208 -0
- package/src/scripts/afk.js +395 -7
- package/src/scripts/backup-all.js +731 -9
- package/src/scripts/backup-source.js +711 -8
- package/src/scripts/brewd.js +373 -7
- package/src/scripts/brewi.js +505 -9
- package/src/scripts/brewr.js +512 -9
- package/src/scripts/brews.js +462 -9
- package/src/scripts/brewu.js +488 -7
- package/src/scripts/c.js +185 -7
- package/src/scripts/ccurl.js +325 -8
- package/src/scripts/certbot-crontab-init.js +488 -8
- package/src/scripts/certbot-init.js +641 -9
- package/src/scripts/ch.js +339 -7
- package/src/scripts/claude-danger.js +253 -8
- package/src/scripts/clean-dev.js +419 -8
- package/src/scripts/clear-dns-cache.js +525 -7
- package/src/scripts/clone.js +417 -7
- package/src/scripts/code-all.js +420 -7
- package/src/scripts/count-files.js +195 -8
- package/src/scripts/count-folders.js +195 -8
- package/src/scripts/count.js +248 -8
- package/src/scripts/d.js +203 -7
- package/src/scripts/datauri.js +373 -8
- package/src/scripts/delete-files.js +363 -7
- package/src/scripts/docker-clean.js +410 -8
- package/src/scripts/dp.js +426 -7
- package/src/scripts/e.js +375 -9
- package/src/scripts/empty-trash.js +497 -7
- package/src/scripts/evm.js +428 -9
- package/src/scripts/fetch-github-repos.js +441 -10
- package/src/scripts/get-channel.js +329 -8
- package/src/scripts/get-course.js +384 -11
- package/src/scripts/get-dependencies.js +290 -9
- package/src/scripts/get-folder.js +783 -10
- package/src/scripts/get-tunes.js +411 -10
- package/src/scripts/get-video.js +352 -9
- package/src/scripts/git-backup.js +561 -9
- package/src/scripts/git-clone.js +477 -9
- package/src/scripts/git-pup.js +303 -7
- package/src/scripts/git-push.js +380 -8
- package/src/scripts/h.js +607 -9
- package/src/scripts/hide-desktop-icons.js +483 -7
- package/src/scripts/hide-hidden-files.js +522 -7
- package/src/scripts/install-dependencies-from.js +440 -9
- package/src/scripts/ips.js +647 -10
- package/src/scripts/iso.js +354 -8
- package/src/scripts/killni.js +561 -7
- package/src/scripts/ll.js +451 -8
- package/src/scripts/local-ip.js +310 -8
- package/src/scripts/m.js +508 -8
- package/src/scripts/map.js +293 -8
- package/src/scripts/mkd.js +287 -7
- package/src/scripts/ncu-update-all.js +441 -8
- package/src/scripts/nginx-init.js +702 -12
- package/src/scripts/npmi.js +366 -7
- package/src/scripts/o.js +495 -8
- package/src/scripts/org-by-date.js +321 -7
- package/src/scripts/p.js +208 -7
- package/src/scripts/packages.js +313 -8
- package/src/scripts/path.js +209 -7
- package/src/scripts/ports.js +582 -8
- package/src/scripts/q.js +290 -8
- package/src/scripts/refresh-files.js +378 -10
- package/src/scripts/remove-smaller-files.js +500 -8
- package/src/scripts/rename-files-with-date.js +517 -9
- package/src/scripts/resize-image.js +523 -9
- package/src/scripts/rm-safe.js +653 -8
- package/src/scripts/s.js +525 -9
- package/src/scripts/set-git-public.js +349 -7
- package/src/scripts/show-desktop-icons.js +459 -7
- package/src/scripts/show-hidden-files.js +456 -7
- package/src/scripts/tpa.js +265 -8
- package/src/scripts/tpo.js +264 -7
- package/src/scripts/u.js +489 -7
- package/src/scripts/vpush.js +422 -8
- package/src/scripts/y.js +267 -7
- package/src/utils/common/os.js +94 -2
- package/src/utils/ubuntu/apt.js +13 -7
- package/src/utils/windows/choco.js +82 -26
- package/src/utils/windows/winget.js +89 -27
|
@@ -0,0 +1,620 @@
|
|
|
1
|
+
# Installing winpty
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
winpty is a Windows software package that provides an interface similar to a Unix pty-master for communicating with Windows console programs. It enables interactive console applications (like Python REPL, Node.js REPL, and Docker) to work correctly in terminal emulators that do not natively support Windows console programs, such as MinTTY (used by Git Bash), Cygwin terminals, and MSYS2.
|
|
6
|
+
|
|
7
|
+
The package consists of:
|
|
8
|
+
|
|
9
|
+
- **libwinpty** - A library for embedding pty functionality
|
|
10
|
+
- **winpty.exe** - A command-line wrapper for running Windows console programs
|
|
11
|
+
- **winpty-agent.exe** - A background process that bridges between console API and terminal I/O
|
|
12
|
+
|
|
13
|
+
winpty works by starting a hidden console window via winpty-agent.exe, which bridges between the Windows console API and terminal input/output escape codes. It polls the hidden console's screen buffer for changes and generates corresponding output streams.
|
|
14
|
+
|
|
15
|
+
**Important**: winpty is a Windows-only tool. It is not needed on Unix-like systems (macOS, Linux) because those operating systems have native pseudoterminal (PTY) support built into the kernel.
|
|
16
|
+
|
|
17
|
+
This guide documents winpty installation procedures for all platforms supported by DevUtils CLI.
|
|
18
|
+
|
|
19
|
+
## Dependencies
|
|
20
|
+
|
|
21
|
+
### macOS (Homebrew)
|
|
22
|
+
- **Required:** None
|
|
23
|
+
- **Note:** winpty is Windows-only and is not applicable to macOS. macOS has native PTY support.
|
|
24
|
+
|
|
25
|
+
### Ubuntu (APT/Snap)
|
|
26
|
+
- **Required:** None
|
|
27
|
+
- **Note:** winpty is Windows-only and is not applicable to Ubuntu/Linux. Linux has native PTY support via `/dev/pts`.
|
|
28
|
+
|
|
29
|
+
### Raspberry Pi OS (APT/Snap)
|
|
30
|
+
- **Required:** None
|
|
31
|
+
- **Note:** winpty is Windows-only and is not applicable to Raspberry Pi OS. Linux has native PTY support.
|
|
32
|
+
|
|
33
|
+
### Amazon Linux (DNF/YUM)
|
|
34
|
+
- **Required:** None
|
|
35
|
+
- **Note:** winpty is Windows-only and is not applicable to Amazon Linux. Linux has native PTY support.
|
|
36
|
+
|
|
37
|
+
### Windows (Chocolatey/winget)
|
|
38
|
+
- **Required:** None (winpty is bundled with Git for Windows by default)
|
|
39
|
+
- **Optional:**
|
|
40
|
+
- `git` - If Git for Windows is installed, winpty is already available via `choco install git -y`
|
|
41
|
+
- **Auto-installed:** None
|
|
42
|
+
|
|
43
|
+
### Git Bash (Manual/Portable)
|
|
44
|
+
- **Required:**
|
|
45
|
+
- `git` - Git for Windows must be installed. Install via `choco install git -y` from an Administrator PowerShell/CMD. winpty is bundled with Git for Windows.
|
|
46
|
+
- **Optional:** None
|
|
47
|
+
- **Auto-installed:** winpty is automatically installed as part of Git for Windows
|
|
48
|
+
|
|
49
|
+
## Prerequisites
|
|
50
|
+
|
|
51
|
+
Before installing winpty on any platform, understand these key points:
|
|
52
|
+
|
|
53
|
+
1. **winpty is Windows-only** - It solves a Windows-specific problem where terminal emulators like MinTTY cannot directly communicate with Windows console programs
|
|
54
|
+
2. **Git for Windows includes winpty** - If you have Git Bash installed, you already have winpty
|
|
55
|
+
3. **No installation needed on Unix systems** - macOS, Linux, and other Unix-like systems have native PTY support and do not need winpty
|
|
56
|
+
|
|
57
|
+
## Platform-Specific Installation
|
|
58
|
+
|
|
59
|
+
### macOS (Homebrew)
|
|
60
|
+
|
|
61
|
+
#### Not Applicable
|
|
62
|
+
|
|
63
|
+
winpty is a Windows-only utility and is not available or needed on macOS.
|
|
64
|
+
|
|
65
|
+
**Why winpty is not needed on macOS:**
|
|
66
|
+
|
|
67
|
+
macOS is a Unix-based operating system with native pseudoterminal (PTY) support built into the kernel. The PTY system in macOS allows terminal emulators (like Terminal.app, iTerm2) to communicate directly with console programs without requiring a translation layer.
|
|
68
|
+
|
|
69
|
+
The functionality that winpty provides on Windows (bridging between terminal emulators and console programs) is handled natively by macOS through:
|
|
70
|
+
|
|
71
|
+
- The `/dev/pty*` device files
|
|
72
|
+
- The `posix_openpt()` and related POSIX functions
|
|
73
|
+
- Native support in all macOS terminal emulators
|
|
74
|
+
|
|
75
|
+
**If you are looking for PTY-related functionality for development:**
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# Python's built-in pty module (no installation needed)
|
|
79
|
+
python3 -c "import pty; print('PTY support available')"
|
|
80
|
+
|
|
81
|
+
# For more advanced PTY handling in Python
|
|
82
|
+
brew install --quiet pexpect
|
|
83
|
+
pip3 install pexpect
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### Ubuntu/Debian (APT)
|
|
89
|
+
|
|
90
|
+
#### Not Applicable
|
|
91
|
+
|
|
92
|
+
winpty is a Windows-only utility and is not available or needed on Ubuntu/Debian Linux.
|
|
93
|
+
|
|
94
|
+
**Why winpty is not needed on Ubuntu:**
|
|
95
|
+
|
|
96
|
+
Ubuntu and Debian are Linux distributions with native pseudoterminal (PTY) support built into the kernel. The PTY subsystem in Linux allows terminal emulators (like GNOME Terminal, Konsole, xterm) to communicate directly with console programs.
|
|
97
|
+
|
|
98
|
+
Linux provides PTY functionality through:
|
|
99
|
+
|
|
100
|
+
- The `/dev/pts` filesystem (devpts)
|
|
101
|
+
- The `posix_openpt()`, `grantpt()`, `unlockpt()`, and `ptsname()` functions
|
|
102
|
+
- Native kernel support via the `CONFIG_UNIX98_PTYS` option
|
|
103
|
+
|
|
104
|
+
**If you are looking for PTY-related functionality for development:**
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Python's built-in pty module (no installation needed)
|
|
108
|
+
python3 -c "import pty; print('PTY support available')"
|
|
109
|
+
|
|
110
|
+
# For more advanced PTY handling in Python
|
|
111
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
### Raspberry Pi OS (APT)
|
|
117
|
+
|
|
118
|
+
#### Not Applicable
|
|
119
|
+
|
|
120
|
+
winpty is a Windows-only utility and is not available or needed on Raspberry Pi OS.
|
|
121
|
+
|
|
122
|
+
**Why winpty is not needed on Raspberry Pi OS:**
|
|
123
|
+
|
|
124
|
+
Raspberry Pi OS is based on Debian Linux and has native pseudoterminal (PTY) support built into the kernel. This applies to both 32-bit (armhf) and 64-bit (arm64) versions of Raspberry Pi OS.
|
|
125
|
+
|
|
126
|
+
The PTY system works identically to standard Linux:
|
|
127
|
+
|
|
128
|
+
- PTY devices are available at `/dev/pts/*`
|
|
129
|
+
- All terminal emulators communicate directly with console programs
|
|
130
|
+
- No translation layer is required
|
|
131
|
+
|
|
132
|
+
**If you are looking for PTY-related functionality for development:**
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Python's built-in pty module (no installation needed)
|
|
136
|
+
python3 -c "import pty; print('PTY support available')"
|
|
137
|
+
|
|
138
|
+
# For more advanced PTY handling in Python
|
|
139
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
### Amazon Linux (DNF/YUM)
|
|
145
|
+
|
|
146
|
+
#### Not Applicable
|
|
147
|
+
|
|
148
|
+
winpty is a Windows-only utility and is not available or needed on Amazon Linux.
|
|
149
|
+
|
|
150
|
+
**Why winpty is not needed on Amazon Linux:**
|
|
151
|
+
|
|
152
|
+
Amazon Linux (both AL2 and AL2023) is a Linux distribution with native pseudoterminal (PTY) support built into the kernel. Whether running on EC2 instances or other environments, PTY support is available out of the box.
|
|
153
|
+
|
|
154
|
+
**If you are looking for PTY-related functionality for development:**
|
|
155
|
+
|
|
156
|
+
**For Amazon Linux 2023:**
|
|
157
|
+
|
|
158
|
+
```bash
|
|
159
|
+
# Python's built-in pty module (no installation needed)
|
|
160
|
+
python3 -c "import pty; print('PTY support available')"
|
|
161
|
+
|
|
162
|
+
# For more advanced PTY handling in Python
|
|
163
|
+
sudo dnf install -y python3-pexpect
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
**For Amazon Linux 2:**
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
# Python's built-in pty module (no installation needed)
|
|
170
|
+
python3 -c "import pty; print('PTY support available')"
|
|
171
|
+
|
|
172
|
+
# For more advanced PTY handling in Python
|
|
173
|
+
sudo yum install -y python3-pexpect
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Windows (Git for Windows - Recommended)
|
|
179
|
+
|
|
180
|
+
#### Prerequisites
|
|
181
|
+
|
|
182
|
+
- Windows 10 version 1903 or higher (64-bit), or Windows 11
|
|
183
|
+
- Administrator PowerShell or Command Prompt
|
|
184
|
+
- Internet connectivity
|
|
185
|
+
|
|
186
|
+
**Important**: winpty is bundled with Git for Windows. If you have Git for Windows installed, winpty is already available. This is the recommended approach because Git for Windows is widely used and includes winpty automatically.
|
|
187
|
+
|
|
188
|
+
#### Installation Steps
|
|
189
|
+
|
|
190
|
+
**Option: Install Git for Windows (includes winpty)**
|
|
191
|
+
|
|
192
|
+
Run the following command in an Administrator PowerShell or Command Prompt:
|
|
193
|
+
|
|
194
|
+
```powershell
|
|
195
|
+
choco install git -y
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation. This installs:
|
|
199
|
+
|
|
200
|
+
- Git command-line tools
|
|
201
|
+
- Git Bash (MinTTY terminal)
|
|
202
|
+
- winpty (for interactive console program support in MinTTY)
|
|
203
|
+
- Git Credential Manager
|
|
204
|
+
|
|
205
|
+
After installation, close and reopen your terminal to ensure PATH changes take effect.
|
|
206
|
+
|
|
207
|
+
#### Verification
|
|
208
|
+
|
|
209
|
+
Open Git Bash and verify winpty is available:
|
|
210
|
+
|
|
211
|
+
```bash
|
|
212
|
+
which winpty
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
Expected output:
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
/usr/bin/winpty
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
Test winpty by running an interactive program:
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
winpty cmd.exe
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
This should open a Windows Command Prompt within Git Bash. Type `exit` to return to Git Bash.
|
|
228
|
+
|
|
229
|
+
Verify the version (winpty does not have a `--version` flag, but you can check it exists):
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
winpty --help
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
Expected output includes usage information:
|
|
236
|
+
|
|
237
|
+
```
|
|
238
|
+
Usage: winpty [options] [--] program [args]
|
|
239
|
+
...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
#### Troubleshooting
|
|
243
|
+
|
|
244
|
+
**Problem**: `winpty: command not found` in Git Bash
|
|
245
|
+
|
|
246
|
+
**Solution**: winpty is included with Git for Windows. If Git Bash is installed but winpty is missing, your Git for Windows installation may be corrupted or very old. Reinstall Git for Windows:
|
|
247
|
+
|
|
248
|
+
```powershell
|
|
249
|
+
choco uninstall git -y
|
|
250
|
+
choco install git -y
|
|
251
|
+
```
|
|
252
|
+
|
|
253
|
+
**Problem**: winpty is present but interactive programs still do not work
|
|
254
|
+
|
|
255
|
+
**Solution**: Ensure you are prefixing the command with `winpty`:
|
|
256
|
+
|
|
257
|
+
```bash
|
|
258
|
+
# Wrong - may not work with interactive programs
|
|
259
|
+
python
|
|
260
|
+
|
|
261
|
+
# Correct - use winpty prefix
|
|
262
|
+
winpty python
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Problem**: "the input device is not a TTY" error
|
|
266
|
+
|
|
267
|
+
**Solution**: This error occurs when running interactive programs without winpty in Git Bash. Use the winpty prefix:
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
winpty docker run -it ubuntu bash
|
|
271
|
+
winpty python
|
|
272
|
+
winpty node
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**Problem**: winpty breaks piping or redirection
|
|
276
|
+
|
|
277
|
+
**Solution**: winpty is designed for interactive use, not for piping. When piping data, run commands without winpty:
|
|
278
|
+
|
|
279
|
+
```bash
|
|
280
|
+
# Without winpty for piping
|
|
281
|
+
echo "print('hello')" | python
|
|
282
|
+
|
|
283
|
+
# With winpty for interactive use
|
|
284
|
+
winpty python
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
### WSL (Ubuntu)
|
|
290
|
+
|
|
291
|
+
#### Not Applicable
|
|
292
|
+
|
|
293
|
+
winpty is a Windows-only utility and is not needed within WSL.
|
|
294
|
+
|
|
295
|
+
**Why winpty is not needed in WSL:**
|
|
296
|
+
|
|
297
|
+
WSL (Windows Subsystem for Linux) runs a real Linux kernel (WSL 2) or a Linux-compatible layer (WSL 1). Within WSL, you have native Linux PTY support through the kernel, just like any other Linux distribution.
|
|
298
|
+
|
|
299
|
+
The WSL terminal environment communicates with programs using standard Linux PTY mechanisms, so winpty is unnecessary.
|
|
300
|
+
|
|
301
|
+
**Important distinction:**
|
|
302
|
+
|
|
303
|
+
- **Inside WSL**: You are running Linux; use native PTY (no winpty needed)
|
|
304
|
+
- **In Windows outside WSL**: Use winpty with Git Bash/MinTTY for interactive Windows console programs
|
|
305
|
+
|
|
306
|
+
**If you are looking for PTY-related functionality for development in WSL:**
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# Python's built-in pty module (no installation needed)
|
|
310
|
+
python3 -c "import pty; print('PTY support available')"
|
|
311
|
+
|
|
312
|
+
# For more advanced PTY handling in Python
|
|
313
|
+
sudo DEBIAN_FRONTEND=noninteractive apt-get install -y python3-pexpect
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
---
|
|
317
|
+
|
|
318
|
+
### Git Bash (Bundled Installation)
|
|
319
|
+
|
|
320
|
+
#### Prerequisites
|
|
321
|
+
|
|
322
|
+
- Windows 10 or Windows 11 (64-bit)
|
|
323
|
+
- Git for Windows installed
|
|
324
|
+
- Internet connectivity (for initial Git installation)
|
|
325
|
+
|
|
326
|
+
**Note**: winpty is automatically included with Git for Windows. When you install Git for Windows, winpty is installed as part of the package and is immediately available in Git Bash.
|
|
327
|
+
|
|
328
|
+
#### Installation Steps
|
|
329
|
+
|
|
330
|
+
winpty is bundled with Git for Windows. To install or reinstall Git for Windows (which includes winpty), run the following command in an Administrator PowerShell or Command Prompt:
|
|
331
|
+
|
|
332
|
+
```powershell
|
|
333
|
+
choco install git -y
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
The `-y` flag automatically confirms all prompts, enabling fully non-interactive installation.
|
|
337
|
+
|
|
338
|
+
After installation, close and reopen Git Bash to ensure the updated PATH is loaded.
|
|
339
|
+
|
|
340
|
+
**Launching Git Bash:**
|
|
341
|
+
|
|
342
|
+
- From Start Menu: Search for "Git Bash"
|
|
343
|
+
- From Command Prompt: Run `"C:\Program Files\Git\bin\bash.exe"`
|
|
344
|
+
- From File Explorer: Right-click in a folder and select "Git Bash Here"
|
|
345
|
+
|
|
346
|
+
#### Verification
|
|
347
|
+
|
|
348
|
+
In Git Bash, verify winpty is available:
|
|
349
|
+
|
|
350
|
+
```bash
|
|
351
|
+
which winpty
|
|
352
|
+
```
|
|
353
|
+
|
|
354
|
+
Expected output:
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
/usr/bin/winpty
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
Test winpty with an interactive command:
|
|
361
|
+
|
|
362
|
+
```bash
|
|
363
|
+
winpty python --version
|
|
364
|
+
```
|
|
365
|
+
|
|
366
|
+
Or start an interactive Python session:
|
|
367
|
+
|
|
368
|
+
```bash
|
|
369
|
+
winpty python
|
|
370
|
+
```
|
|
371
|
+
|
|
372
|
+
Expected behavior: Python REPL opens and accepts input. Type `exit()` or press Ctrl+D to exit.
|
|
373
|
+
|
|
374
|
+
Check the winpty installation location:
|
|
375
|
+
|
|
376
|
+
```bash
|
|
377
|
+
ls -la /usr/bin/winpty*
|
|
378
|
+
```
|
|
379
|
+
|
|
380
|
+
Expected output shows multiple winpty files:
|
|
381
|
+
|
|
382
|
+
```
|
|
383
|
+
-rwxr-xr-x 1 user group xxxxx /usr/bin/winpty
|
|
384
|
+
-rwxr-xr-x 1 user group xxxxx /usr/bin/winpty-agent
|
|
385
|
+
-rwxr-xr-x 1 user group xxxxx /usr/bin/winpty-debugserver
|
|
386
|
+
```
|
|
387
|
+
|
|
388
|
+
#### Troubleshooting
|
|
389
|
+
|
|
390
|
+
**Problem**: Interactive commands do not display properly or hang
|
|
391
|
+
|
|
392
|
+
**Solution**: Prefix interactive Windows console programs with `winpty`:
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
# Interactive Python
|
|
396
|
+
winpty python
|
|
397
|
+
|
|
398
|
+
# Interactive Node.js
|
|
399
|
+
winpty node
|
|
400
|
+
|
|
401
|
+
# Interactive Docker container
|
|
402
|
+
winpty docker run -it ubuntu bash
|
|
403
|
+
|
|
404
|
+
# Interactive MySQL client
|
|
405
|
+
winpty mysql -u root -p
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
**Problem**: Creating aliases for common interactive programs
|
|
409
|
+
|
|
410
|
+
**Solution**: Add aliases to your `~/.bashrc` file:
|
|
411
|
+
|
|
412
|
+
```bash
|
|
413
|
+
# Add these lines to ~/.bashrc
|
|
414
|
+
echo 'alias python="winpty python"' >> ~/.bashrc
|
|
415
|
+
echo 'alias node="winpty node"' >> ~/.bashrc
|
|
416
|
+
echo 'alias ipython="winpty ipython"' >> ~/.bashrc
|
|
417
|
+
source ~/.bashrc
|
|
418
|
+
```
|
|
419
|
+
|
|
420
|
+
**Problem**: winpty causes issues with non-interactive commands
|
|
421
|
+
|
|
422
|
+
**Solution**: winpty is only needed for interactive use. For scripts and piping, run commands without winpty:
|
|
423
|
+
|
|
424
|
+
```bash
|
|
425
|
+
# Without winpty for non-interactive use
|
|
426
|
+
python script.py
|
|
427
|
+
node app.js
|
|
428
|
+
echo "SELECT 1;" | mysql -u root
|
|
429
|
+
|
|
430
|
+
# With winpty for interactive use
|
|
431
|
+
winpty python
|
|
432
|
+
winpty node
|
|
433
|
+
winpty mysql -u root -p
|
|
434
|
+
```
|
|
435
|
+
|
|
436
|
+
**Problem**: "stdout is not a tty" error
|
|
437
|
+
|
|
438
|
+
**Solution**: This can occur when winpty interferes with piping. Run without winpty for piped commands:
|
|
439
|
+
|
|
440
|
+
```bash
|
|
441
|
+
# This may fail
|
|
442
|
+
winpty python -c "print('hello')" | grep hello
|
|
443
|
+
|
|
444
|
+
# This works
|
|
445
|
+
python -c "print('hello')" | grep hello
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**Problem**: MSYS path conversion issues with winpty
|
|
449
|
+
|
|
450
|
+
**Solution**: Git Bash/MSYS2 converts Unix-style paths to Windows paths automatically. To prevent this:
|
|
451
|
+
|
|
452
|
+
```bash
|
|
453
|
+
MSYS_NO_PATHCONV=1 winpty some-command /path/to/file
|
|
454
|
+
```
|
|
455
|
+
|
|
456
|
+
---
|
|
457
|
+
|
|
458
|
+
## Post-Installation Configuration
|
|
459
|
+
|
|
460
|
+
### Creating Shell Aliases for Common Programs
|
|
461
|
+
|
|
462
|
+
If you frequently use interactive programs in Git Bash, create aliases to automatically use winpty:
|
|
463
|
+
|
|
464
|
+
```bash
|
|
465
|
+
# Open ~/.bashrc in an editor
|
|
466
|
+
notepad ~/.bashrc
|
|
467
|
+
```
|
|
468
|
+
|
|
469
|
+
Add the following aliases:
|
|
470
|
+
|
|
471
|
+
```bash
|
|
472
|
+
# Interactive program aliases for Git Bash
|
|
473
|
+
alias python='winpty python'
|
|
474
|
+
alias python3='winpty python3'
|
|
475
|
+
alias node='winpty node'
|
|
476
|
+
alias ipython='winpty ipython'
|
|
477
|
+
alias php='winpty php -a'
|
|
478
|
+
alias mysql='winpty mysql'
|
|
479
|
+
alias psql='winpty psql'
|
|
480
|
+
alias mongo='winpty mongo'
|
|
481
|
+
alias redis-cli='winpty redis-cli'
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
Reload your shell configuration:
|
|
485
|
+
|
|
486
|
+
```bash
|
|
487
|
+
source ~/.bashrc
|
|
488
|
+
```
|
|
489
|
+
|
|
490
|
+
### Conditional Aliases (Optional)
|
|
491
|
+
|
|
492
|
+
For more sophisticated setups, you can create conditional aliases that only apply winpty when running interactively:
|
|
493
|
+
|
|
494
|
+
```bash
|
|
495
|
+
# Add to ~/.bashrc
|
|
496
|
+
if [ -t 1 ]; then
|
|
497
|
+
# Only apply these aliases when running in an interactive terminal
|
|
498
|
+
alias python='winpty python'
|
|
499
|
+
alias node='winpty node'
|
|
500
|
+
fi
|
|
501
|
+
```
|
|
502
|
+
|
|
503
|
+
---
|
|
504
|
+
|
|
505
|
+
## Common Issues
|
|
506
|
+
|
|
507
|
+
### Issue: "the input device is not a TTY"
|
|
508
|
+
|
|
509
|
+
**Symptoms**: Error message when running Docker, Python, or Node.js interactively in Git Bash
|
|
510
|
+
|
|
511
|
+
**Solution**: This is the primary use case for winpty. Prefix your command with `winpty`:
|
|
512
|
+
|
|
513
|
+
```bash
|
|
514
|
+
# Instead of:
|
|
515
|
+
docker run -it ubuntu bash
|
|
516
|
+
|
|
517
|
+
# Use:
|
|
518
|
+
winpty docker run -it ubuntu bash
|
|
519
|
+
```
|
|
520
|
+
|
|
521
|
+
### Issue: Arrow Keys and Special Keys Not Working
|
|
522
|
+
|
|
523
|
+
**Symptoms**: Arrow keys produce escape sequences like `^[[A` instead of navigating
|
|
524
|
+
|
|
525
|
+
**Solution**: Use winpty to enable proper key handling:
|
|
526
|
+
|
|
527
|
+
```bash
|
|
528
|
+
winpty python
|
|
529
|
+
winpty node
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### Issue: Colored Output Not Displaying
|
|
533
|
+
|
|
534
|
+
**Symptoms**: Programs that should show colored output display plain text or escape codes
|
|
535
|
+
|
|
536
|
+
**Solution**: winpty handles ANSI escape sequences. Ensure you are using winpty:
|
|
537
|
+
|
|
538
|
+
```bash
|
|
539
|
+
winpty npm test
|
|
540
|
+
```
|
|
541
|
+
|
|
542
|
+
### Issue: Programs Hang or Freeze
|
|
543
|
+
|
|
544
|
+
**Symptoms**: Interactive programs become unresponsive in Git Bash
|
|
545
|
+
|
|
546
|
+
**Solutions**:
|
|
547
|
+
|
|
548
|
+
1. Use winpty:
|
|
549
|
+
```bash
|
|
550
|
+
winpty program-name
|
|
551
|
+
```
|
|
552
|
+
|
|
553
|
+
2. If using winpty already, try running without it (for non-interactive use):
|
|
554
|
+
```bash
|
|
555
|
+
program-name --some-flag
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
3. Try running in Windows Command Prompt instead of Git Bash for problematic programs
|
|
559
|
+
|
|
560
|
+
### Issue: winpty Not Available After Git Update
|
|
561
|
+
|
|
562
|
+
**Symptoms**: winpty stops working after updating Git for Windows
|
|
563
|
+
|
|
564
|
+
**Solution**: Reinstall Git for Windows to ensure all components are properly installed:
|
|
565
|
+
|
|
566
|
+
```powershell
|
|
567
|
+
choco uninstall git -y
|
|
568
|
+
choco install git -y
|
|
569
|
+
```
|
|
570
|
+
|
|
571
|
+
### Issue: Incorrect Path Handling
|
|
572
|
+
|
|
573
|
+
**Symptoms**: File paths are mangled or converted incorrectly when using winpty
|
|
574
|
+
|
|
575
|
+
**Solution**: Disable MSYS path conversion for specific commands:
|
|
576
|
+
|
|
577
|
+
```bash
|
|
578
|
+
MSYS_NO_PATHCONV=1 winpty command /path/to/file
|
|
579
|
+
```
|
|
580
|
+
|
|
581
|
+
Or use Windows-style paths:
|
|
582
|
+
|
|
583
|
+
```bash
|
|
584
|
+
winpty command "C:\path\to\file"
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## How winpty Works
|
|
590
|
+
|
|
591
|
+
Understanding how winpty works can help troubleshoot issues:
|
|
592
|
+
|
|
593
|
+
1. **Problem**: MinTTY (Git Bash's terminal) uses Unix-style PTY communication, but Windows console programs expect Windows Console API calls.
|
|
594
|
+
|
|
595
|
+
2. **Solution**: winpty creates a hidden Windows console window and runs the target program in it. The winpty-agent process monitors this hidden console and translates:
|
|
596
|
+
- Keyboard input from MinTTY into Windows console input events
|
|
597
|
+
- Console screen buffer changes into terminal escape sequences for MinTTY
|
|
598
|
+
|
|
599
|
+
3. **Architecture**:
|
|
600
|
+
```
|
|
601
|
+
MinTTY <-> winpty.exe <-> winpty-agent.exe <-> Hidden Console <-> Target Program
|
|
602
|
+
```
|
|
603
|
+
|
|
604
|
+
4. **Limitations**:
|
|
605
|
+
- winpty adds overhead compared to native console programs
|
|
606
|
+
- Some advanced console features may not translate perfectly
|
|
607
|
+
- Piping and redirection should be done without winpty
|
|
608
|
+
|
|
609
|
+
---
|
|
610
|
+
|
|
611
|
+
## References
|
|
612
|
+
|
|
613
|
+
- [winpty GitHub Repository](https://github.com/rprichard/winpty)
|
|
614
|
+
- [winpty Releases](https://github.com/rprichard/winpty/releases)
|
|
615
|
+
- [Git for Windows](https://gitforwindows.org/)
|
|
616
|
+
- [Git for Windows FAQ](https://gitforwindows.org/faq)
|
|
617
|
+
- [MSYS2 winpty Package](https://packages.msys2.org/packages/winpty)
|
|
618
|
+
- [Scoop winpty Package](https://bjansen.github.io/scoop-apps/extras/winpty/)
|
|
619
|
+
- [MinTTY Terminal](https://mintty.github.io/)
|
|
620
|
+
- [Windows Console and Terminal Ecosystem](https://docs.microsoft.com/en-us/windows/console/)
|