typex
v0.4.3
Published
Unix CLI that provides salient information about installed commands, programs, and filesystem items, combining elements from standard Unix utilities type, which, and file.
Downloads
25
Maintainers
Readme
Contents
typex — introduction
typex
is an enhanced version of the type
Unix shell builtin that
incorporates features from the which
and file
utilities:
By default, it provides information about the current shell.
Given a name, it indicates how the current shell would interpret that name as a command, and provides information about each command form found.
Given a filesystem path, it provides information such as file type and canonical path.
typex
extends type
as follows:
- All defined forms of a given command name are (always) reported, which includes shell keywords, aliases, shell functions, builtins, and executables.
- Defined forms are listed in descending order of precedence - the first form listed is the effective one.
- If an executable is a symlink, the entire chain of symlinks up to and including the ultimate target is printed, using absolute paths.
- The type of executable is printed, including the specific shell/interpreter used to run executable scripts.
- Version information, if available, is printed for executables.
- Optionally, you can get information about any filesystem object, including its canoncial path and symlink chain, if applicable.
Note: typex
is designed for interactive use, to provide humans with concise, salient information about a command or filesystem object.
As such, its output is geared toward readability by humans, and should not be relied on for programmatic parsing.
See the examples below, concise usage information further below, or read the manual.
For supported platforms and shells, see the Installation chapter.
Examples
# Print information about the current shell.
$ typex
BINARY: /bin/bash [GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin14)]
# Print information about command forms named 'printf' in order of precedence.
$ typex printf
BUILTIN: printf
BINARY: /usr/bin/printf [printf (GNU coreutils) 8.21]
# Print information about binary 'nawk'; note the chain of symlinks,
# and its use of *absolute* paths, as well as the version information.
$ typex nawk
BINARY: /usr/bin/nawk@ -> /etc/alternatives/nawk@ -> /usr/bin/gawk [GNU Awk 4.0.1]
# Print information about executable script 'npm';
# note the interpreter information ('POSIX shell script').
$ typex npm
SCRIPT: /usr/bin/npm@ -> /usr/lib/node_modules/npm/bin/npm-cli.js (POSIX shell script) [2.11.3]
# Print information about an alias:
$ alias lsx='ls -FAhl'
$ typex lsx
ALIAS: lsx='ls -FAhl'
BINARY: /bin/ls [ls (GNU coreutils) 8.21]
# Print the canonical path of a directory:
$ typex /etc/apache2/
DIRECTORY: /etc/apache2 -> /private/etc/apache2
# Print extended information about special file /dev/null
$ typex -v /dev/null
FILE: /dev/null (character special )
crw-rw-rw- 1 root root 1, 3 Feb 1 19:43
Installation
Supported platforms
- When installing from the npm registry: Linux and OS X
- When installing manually: any Unix-like platform with Bash that uses either BSD or GNU utilities.
Supported shells
For this utility to detect the current shell's aliases, keywords, functions, and builtins, it must be sourced, which is supported in the following shells:
- Bash, Ksh, and Zsh
typex
can still be useful in unsupported shells when invoked standalone (in which case it runs in bash
), albeit in limited form:
- only executable files and filesystem objects will be detected - no other command forms.
- a warning to that effect is printed; you can suppress it with
-p
Simply put, non-sourced use of typex
amounts to an enhanced version of the which
utility.
Installation from the npm registry
Note: Even if you don't use Node.js, its package manager, npm
, works across platforms and is easy to install; try curl -L http://git.io/n-install | bash
With Node.js or io.js installed, install the package as follows:
[sudo] npm install typex -g
Note:
- Whether you need
sudo
depends on how you installed Node.js / io.js and whether you've changed permissions later; if you get anEACCES
error, try again withsudo
. - The
-g
ensures global installation and is needed to puttypex
in your system's$PATH
.
IMPORTANT: After installation, run typex -i
to add sourcing of typex
to the per-user initialization file of all supported shells that are present (e.g., ~/.bashrc
).
To remove these sourcing commands later, run typex -u
.
Manual installation
- Download this
bash
script astypex
. - Make it executable with
chmod +x typex
. - Move it or symlink it to a folder in your
$PATH
, such as/usr/local/bin
(OS X) or/usr/bin
(Linux).
IMPORTANT: After installation, run typex -i
to add sourcing of typex
to the per-user initialization file of all supported shells that are present (e.g., ~/.bashrc
).
To remove these sourcing commands later, run typex -u
.
Usage
Find concise usage information below; for complete documentation, read the manual online, or, once installed, run man typex
(typex --man
if installed manually).
$ typex --help
Reports salient information about available commands, programs, and
filesystem items, such as command or file type, (ultimate) location,
and version.
typex [-p] [-V] [-v] [<nameOrPath>...]
-p look for files only (ignore shell aliases, keywords, functions,
builtins)
-V skip attempt to obtain executable version information
-v verbose mode: report additional information
Install / uninstall sourcing via shell-initialization files (required
to detect aliases, functions, shell builtins - supported in
Bash, Ksh, Zsh):
typex -i
typex -u
License
Copyright (c) 2015-2020 Michael Klement [email protected] (http://same2u.net), released under the MIT license.
Acknowledgements
This project gratefully depends on the following open-source components, according to the terms of their respective licenses.
npm dependencies below have optional suffixes denoting the type of dependency; the absence of a suffix denotes a required run-time dependency: (D)
denotes a development-time-only dependency, (O)
an optional dependency, and (P)
a peer dependency.
npm dependencies
Changelog
Versioning complies with semantic versioning (semver).
v0.4.3 (2020-10-13):
- [fix] npm v6.14.8 inexplicably complains about the "install" command in package.json (which simply printfs an informational message), so it is diabled for now.
v0.4.2 (2020-10-13):
- [fix] Syntax error fixed that was masked by an accidental non-breaking space Unicode char.
v0.4.1 (2015-09-21):
- [fix]
typex /
now works correctly.
- [fix]
v0.4.0 (2015-09-21):
- [potentially breaking change]
typex
now accepts options after operands as well (except after--
), and now also accepts long option names. - [doc]
typex
now has a man page (if manually installed, usetypex --man
);typex -h
now just prints concise usage information. - [doc] Read-me improved.
- [fix] Various fixes and stability improvements.
- [dev] Installation of sourcing (with
-i
) no longer usesed
so as to work on a wider range of platforms, notably Fedora. - [dev] Tests improved, additional tests added.
- [potentially breaking change]
v0.3.3 (2015-09-15):
- [dev] Makefile improvements; various other behind-the-scenes tweaks.
v0.3.2 (2015-09-03):
- [fix] Broken (dangling) symlinks are now properly detected and reported.
v0.3.1 (2015-06-26):
- [dev] Makefile updated; to-do file added; typo in source-code comment fixed.
- [doc] Minor read-me revision.
v0.3.0 (2015-06-10):
- [behavior change, enhancement] When reporting on an alias, information about the underlying command is now output with indentation, so as to make it clear that the information is subordinate to the alias information.
- [fix] Reporting on an alias' underlying command no longer causes additional command forms of the same name to be ignored.
- [fix] Obtaining a file's last-modified timestamp no longer breaks with filenames with embedded spaces.
- [doc] Read-me improvements; version badge switched to shields.io; license badge added.
v0.2.1 (2015-05-30):
- [doc] npm registry badge added
v0.2.0 (2015-05-24):
- [enhancement] Now by default prints information about the current shell (if no names are given).
- [enhancement] Specifying
.
now also prints the current directory's canonical path. - [enhancement] Given a filesystem path, now also displays its canonical path with all symlinks resolved, if different.
- [enhancement] A warning is now issued if a bareword can't be found as a command, but a file or dir. of the same name exists in the current dir.
- [enhancement] For aliases, their definitions are now printed recursively, if applicable, and, if the ultimate definition's first token is a command, its information is printed as well.
- [fix]
typex perl
now correctly reports Perl's version. - [fix] Paths with embedded space are now handled correctly.
v0.1.7 (2015-03-04):
- Fix: Variables
$u
and$i
that happen to be defined in the current shell no longer interfere with the sourced function.
- Fix: Variables
v0.1.6 (2015-02-11):
- Temp. fix:
typex -i
now properly reports failure on platforms that don't have the actualed
line editor, such as Debian.
- Temp. fix:
v0.1.5 (2015-02-11):
- Fix: --version no longer mistakenly exits the current shell when typex is invoked as a sourced function.
- Dev: bash-presence test improved.
- Dev: Makefile improvements.
v0.1.4 (2015-02-11):
- Fix: Filenames that start with '-' are now handled correctly.
- Dev: bash-presence test added.
- Dev: Makefile improvements.
v0.1.3 (2015-02-09):
- Doc: read-me and package description improved.
v0.1.2 (2015-02-07):
- Fix: sourcing no longer auto-installed/-removed on package installation - removed due to permission headaches; users must now run typex -i manually after installation.
v0.1.1 (2015-02-07):
- Fix: --version reported incorrect version number.
- Temp. fix: installation of sourcing with -i doesn't report error in case of failure so as not to prevent installation of the npm package altogether.
v0.1.0 (2015-02-07):
- Initial release.