1 unstable release
0.1.0 | Jun 6, 2021 |
---|
#117 in #run-command
14KB
273 lines
termrun
Send & run commands on other open Unix terminals
Usage
$ termrun [--newline] [--all|--pty /dev/pty/N] cmd
Note: Requires sudo
each time unless root is set as owner. See Privileges section below
Simple example
Open terminal 1:
$ tty
/dev/pts/2
Open terminal 2:
$ termrun --newline --pty /dev/pts/2 echo hello world
--newline
appends \n
to the sent command to actually run
Displayed in open terminal 1:
$ tty
/dev/pts/2
$ echo hello world
hello world
Reload all terminals example
$ vim ~/.zshrc # make config changes
$ termrun --newline --all source ~/.zshrc
Install
Cargo
If you're using a recent version of Cargo, you can see the cargo install
command:
$ cargo install termrun
Build from source
After git cloning this repo, you can install as a cargo crate through
$ cargo install --path path/to/repo
This should make termrun
available everywhere assuming your cargo crates are in $PATH
Privileges / Post-installation
termrun
uses ioctl(2)
under the hood through the TIOCSTI cmd flag. To do this successfully, the process needs root user privileges to run.
In practice, this means having to run termrun
with sudo
. By default when you install global crates, sudo doesn't know about them:
$ termrun
Error: EPERM: Operation not permitted
$ sudo termrun
[sudo] password for user:
sudo: termrun: command not found
The solutions here are to:
- (Easiest) Symlink
termrun
into asudo
-friendly path:sudo ln -s ~/.cargo/bin/termrun /usr/local/bin/
- Always specify the complete crate path so
sudo
can findtermrun
:sudo ~/.cargo/bin/termrun
- Specify
sudo
to use your$PATH
:sudo env "PATH=$PATH" termrun
License
MIT - Maintained by Milan
Dependencies
~4–12MB
~149K SLoC