7 releases

0.1.3 Jan 24, 2024
0.1.1 Apr 13, 2023
0.1.0 Aug 17, 2022
0.0.4 Aug 5, 2022
0.0.2 May 8, 2022

#2752 in Command line utilities

MIT license

47KB
1.5K SLoC

printenv2

A printenv rewrite in Rust.

Advantages over classic implementations

  • Rich-format output
    • Colored mode
    • Sort mode: output can be sorted by environment variable names
    • Escape mode:
      • Single-line: escape line break characters
      • Unprintable characters
    • JSON mode
  • Remote mode. See notes
  • Cross-platform

Installation

  • via package managers:
    • Arch Linux: paru -S printenv2
  • via Cargo: Run cargo install printenv2 if you already have Rust development environment setup.

Notes on Remote Mode

printenv2 can read environment variables of another running process.

Basic usage:

# Make sure you have the privilege to inspect the target process.
printenv2 --pid 1000

Platform-specifics:

Platform Environment variables at startup Environment variables in present
Linux printenv2 --pid <PID> Unsafe[^1].
printenv2 --debugger-helper generates a shell script for that using gdb.
sh <(printenv2 --debugger-helper=gdb) <PID> | printenv2 --load -.
sudo is likely required.
Windows Unsupported. Unsafe[^1].
printenv2 --pid <PID>
Unix (*BSD) printenv2 --pid <PID> Unsafe[^1].
printenv2 --debugger-helper generates a shell script for that using gdb.
sh <(printenv2 --debugger-helper=gdb) <PID> | printenv2 --load -.
sudo is likely required.
macOS printenv2 --pid <PID> Unsupported.
Other Unsupported. Unsupported.

[^1]: Be careful. These methods either requires the process to be suspended for memory access; or they use undocumented APIs which may not work in the future.

License

MIT

Dependencies

~2–47MB
~696K SLoC