v0.7.0
The registry reads 270 commands through 737 definitions, up from 227
through 600: sar's reports, gpg keys, git's branches and config, file
system and partition tools (dumpe2fs, wipefs, gdisk, partx), CUPS's
lpstat and more. What was read wrong with exit 0 is refused instead: a
csv whose lines end with a carriage return alone, and YAML text after a
flow collection. A csv record read as data is bounded by the input limit
like every other format, an option error names the option the way the
help writes it, and top -b -n N is a list with a record per iteration.
Added
- Twenty-three commands:
dumpe2fs -handtune2fs -l(the superblock
of an ext2/3/4 file system),e2freefrag(free space summary and
histogram),wipefs(the signature table, and the report--all
prints),partx --show(with rounded sizes and with-b),gdisk -l
andsgdisk -p(a GPT listing),filefrag -v(the extents of each
file),fincore(with rounded sizes and with-b),diffstat,
gocyclo(with-avgand-avg-short),exif(libexif's table),
isoinfo -d,cmpandcmp -b,cloud-init status --long,
pro statuson a machine with no subscription (also asua),
oomctl,pinkyandpinky -l,sttyandstty -a,
setxkbmap -query,udisksctl status,lpstat -p,-vand-t,
andcpupower frequency-info.git diff --statis no longer read
fromdiffstatoutput, whose count column git never prints at that
width. The registry holds 270 commands through 737 definitions. - net-tools
arp,arp -nandarp -i IFACE(arp/net-tools), the
cache as a table, andifconfig -s(ifconfig/net-tools-short).
arp -areads an entry published for a proxy, which net-tools prints
with<from_interface>for its hardware address and was refused.
net-toolsroute -ee(route/linux-extended) androute -A inet6
(route/linux-inet6), androute -ethroughnetstat/routing. A
rejecting route, whose counts net-tools prints as-, was refused by
route/linuxandnetstat/routing; the counts are null now, and the
published schemas are unchanged, since they already allowed it. The
registry holds 247 commands through 704 definitions. numactl --show(the NUMA policy and the processors and nodes a
process is bound to) andtaskset -p(the affinity mask of a process,
beside the list taskset -pc already gave), andresolvectl query
(the answers for each name, with the link, the protocol, how long it
took and where the data came from). The registry holds 247 commands
through 707 definitions.gpg -kandgpg -K, each key with its algorithm, dates,
capabilities and fingerprint, its user IDs with their validity, and its
subkeys. The registry holds 247 commands through 700 definitions.dpkg-deb -I(a package's size, the members of its control archive
and its control fields) anddpkg-deb -c, which prints the listing
tar/gnu reads, anddpkg-divert --list. The registry holds 247
commands through 699 definitions.readelf -s -W, each symbol table with the value, size, type,
binding, visibility, section and name of every symbol, and the version
a symbol is bound to. The registry holds 245 commands through 697
definitions.- Three commands of poppler-utils:
pdfinfo(the document information,
page count, page size and version),pdffonts(each font with its
type, encoding and whether it is embedded) andpdfimages -list
(each image with its size, color space and encoding), andtrust listfrom p11-kit (each certificate of the trust store). The registry
holds 245 commands through 696 definitions. - The checksum lines of more tools:
cksum -a ALGORITHM(tagged, and
with--untagged),cksum -a bsd,shasumwith no algorithm,-a 1,
224,384and512and with--tag, andb2sum -l BITSfor 128,
256 and 384 bits. Each goes to the definition whose line it prints. git config --list --show-originand--show-scope(the scope, the
kind of origin and the file of each setting),git diff --shortstat
andgit ls-tree -l(the size of each blob). The registry holds 241
commands through 692 definitions.go tool cover -func(the coverage of each function and the total),
git status --porcelain=v2(the branch headers, and each entry by
kind with its modes and object names), andgit log --numstat,
--name-statusand--name-only(andgit showwith them), which
before failed with exit 3. git/log now refuses those forms and-p
with exit 4. The registry holds 241 commands through 689 definitions.- Seventeen definitions. Eight commands jz did not read:
apt-config dump,avahi-browse -p(and with-rthe resolved host, address,
port and TXT record; a browse left running is read as a stream),
fc-match,gio mime TYPE,gpgconf --list-dirsand
--list-components,gsettings list-recursively(a value kept as the
GVariant text printed),pwdx(read only when named) and
systemd-delta --diff=false. More of three it did:git diff --name-status(a quoted path decoded),git reflog,git ls-remote,
git cherry,systemd-analyze timespan,timestampandcalendar,
andresolvectl dnsanddomain. - Three more:
sum(the BSD checksum, told from cksum by its padding),
ipcs -l(a record per resource) anddf -Pwith-B,-mor
--block-size(the unit the heading names in bytes). The registry
holds 236 commands through 620 definitions. sar -d, the activity of each block device, and for ELF files
readelf -S -W(the section headers),readelf -d(the dynamic
section) andsize -A(the size and address of each section), and
rustc -vVandcargo -vV, and BusyBoxtop -b(a virtual size
that runs into the percentage beside it is told apart). The registry
holds 237 commands through 627 definitions.- Twenty-five
sarreports:-W,-H,-v,-I,-u ALL,-r ALL,
-m CPU, and with-nthe reportsEDEV,NFS,NFSD,SOCK,
IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,
EIP6,ICMP6,EICMP6,UDP6andSOFT,pidstat -U, the
per-task report with user names, andiostat -x -d, the extended
device counters without the CPU table, andvmstat -p PARTITION
(655 definitions). - Network settings:
ethtool -g(ring sizes) andethtool -a(pause
frames),ip route get,nmcli -t device,iw reg get(the
regulatory rules per frequency range) andhostname -I. pmap -x(a record per process with its mappings and totals),
pgrep -landgetent ahosts.rpm -qiandrpm -qia(rpm/info), one object per package with
the description kept whole, read from rpm 4.14, 4.16 and 6.0 output;
git log --statand--shortstat(git/log-stat), each commit with
its diffstat asfilesandsummary;ifconfigfrom net-tools
(ifconfig/net-tools) and from macOS and FreeBSD (ifconfig/bsd);
and macOSarp -a(arp/darwin)./proc/pressure/*(pressure stall averages),/proc/self/io,
/proc/cgroups,/proc/net/sockstat,/proc/PID/mapsand
/proc/net/if_inet6.apt-cache show(a record per package version, sizes typed), and
snap refresh --list,snap aliasesandsnap version.- For git,
branch(which branch is checked out here or in another
worktree),status -sb(the branch, its upstream and how far ahead or
behind, then the changed paths),worktree list --porcelainand
count-objects -vH; andgo version. The registry holds 241 commands
through 684 definitions. jz run --format NAMEreads the command's output as a data format,
the wayCOMMAND | jz --format NAMEreads it, with--stream,
--columnsand--typeas there.jz run --typealready told the
caller to give--format csv, whichjz rundid not take.
Changed
jz run --helplists--format,--columnsand--typeunder
Input and the parser options under the same heading asjz --help,
where--columnsand--typewere among the parser options and
--formatamong the options for the command.npm ls -gandnpm ls -g --allare read. The first line is the
global directory with no package name, so the project'snamein
npm/ls and the root'snamein npm/ls-all may be null, and both
schemas are version 2. Before, the output was refused with exit 4.go list -m -u allis read: go/list-modules addsupdate, the newer
version shown in brackets,retractedanddeprecated, and the same
three for the replacement. Before, the first line with any of them
failed with exit 3. Every object now has these keys, so the schema is
version 2.git branch -ris read, andgit branch -awhen the current branch
is past the twentieth line. Both were refused with exit 4, since the
signature asked for a line marked current.- An
argsentry that ends in=also matches the one-dash spelling
of Go's flag package:any: ["-func="]takes-func=c.out, which
before was only split into letters. git log --statoutput named as--parser git --variant logis
refused by the signature (exit 4) instead of failing inside the message
(exit 3), and detection hands it togit/log-stat. The published
schema of git/log is unchanged.- A file path names more definitions: a dot in the file name is looked
up as a dash (jz --file /etc/resolv.confreads with etc/resolv-conf)
and a file one directory down has that directory joined to its name
(/proc/net/devis proc/net-dev,/proc/self/iois proc/self-io).
Before, both went to automatic detection, which refuses formats that
are read only when named. A capture saved asfstab.txtstill names
nothing. iostat -sandiostat -xsprint short forms whose columns
(kB_w+d/s,kB/s,rqm/s,await,areq-sz,aqu-sz,%util)
iostat/linux read as strings; they are numbers now, and the published
schema of iostat/linux is version 3.top/linuxis a list with one record per iteration, sotop -b -n 2
andjz run --stream top -b -d 1are read: before, the second
iteration's summary was taken for a row of the first one's task table
and the reading ended with exit 3.top -b -n1is now a list of one
object instead of the object; the published schema is version 2. A
stream writes an iteration once the next one begins, or the output
ends.jz new KEY=@FILEand--text-file KEY=PATHleave out a byte order
mark at the start of the file, as--format textandjz new --each KEY=@-already did. A document built from a file saved with one no
longer starts its value with U+FEFF.
Fixed
- A csv or tsv whose lines end with a carriage return alone was read as
one header line and no rows, exit 0. A carriage return outside a quoted
value is refused with exit 3 now. - Reading a csv or tsv as data refused a record longer than 1 MiB, the
line limit of command output, while every other data format took one up
to the 64 MiB input limit. The input limit bounds a csv record too. jz run --parser P -- CMDnamed P where CMD printed nothing
(df printed nothingforsh -c ...). It names the command it ran.jz run --timeout -1sran with no limit. A negative duration is a usage
error.- An option jz does not have, or a value one cannot take, was reported in
the words of Go's flag package with one dash (flag provided but not defined: -nope,invalid value "x" for flag -timeout: parse error).
It isunknown option --nopeand--timeout expects a duration such as 30s or 2m, got "x"now. - YAML read with exit 0 into something other than the text said: text
after a flow collection on its line was dropped (a: [b]cread as
{"a":["b"]}), an anchor on a key inside a flow mapping or after?
became part of the key ({&x a: 1}read as{"&x a":1}), and?in
a flow collection became part of the key. Each is refused with exit 3. - A YAML file that opens with a
%YAML 1.2directive and---was
refused as holding two documents. The directive is read, a version
other than 1 is refused by name, and so is%TAG, whose tags jz does
not read. jz run filewith a name outside ASCII returned the name as file
printed it in the C locale (caf\303\251.txt) with exit 0, andjz run ps aux,top -b -candpgrep -lreturned a command line outside
ASCII as question marks. jz now runs file, GNU tar, ps, top and pgrep
in the C.UTF-8 locale, where the text is printed as it is. A file name
still written with an octal escape, which could be a name holding those
characters, is refused.jz run tar -tvfreads a name outside ASCII
instead of failing with exit 3.- Output that adds what a definition does not read is refused with exit
4 instead of reaching it and failing with exit 3:mpstat -A,
mpstat -I CPU,sar -A, two sar or pidstat reports in one run
(sar -u -r,pidstat -u -d),sar -h,readelf -aand two readelf
reports together (readelf -h -S),ip -s address,ip -d address,
andip -s -h linkandip -s -d link. jz new 'a[][]=1'wrote{"a[]":["1"]}, a key the documentation says
a plain argument cannot name. A key that still ends in[]once the
[]that appends is taken off is refused with exit 2, in a plain
argument and in--stringand--text-file.sar -B,pidstat,pidstat -Uandpidstat -rare identified by
their whole header rather than its first columns, so the forms an
older sysstat prints (%vmeffin place ofpgprom/sandpgdem/s,
no%wait) are refused as another format (exit 4) instead of chosen
and then failing on their first row (exit 3).sar -u ALLpiped to jz was read asmpstatwith exit 0: the two
print the same ten CPU columns, sar with%stealbefore%irq, and
mpstat/linux looked only as far as%nice, so steal time came out as
interrupt time. mpstat/linux now asks for its whole header.- A command that prints at an interval gets its records out while it
runs.jz run --stream ping HOSTnever chose a definition, since
ping/linux asked for the summary ping prints only at its end, and
jz run ping -c 25 HOSTfailed with exit 4 because that summary came
past the lines a signature looks at.free -h -s 1andjournalctl -fwaited for twenty lines or for the command to end before their
first record, since a rival variant could still have matched a later
line; the free and journalctl signatures now look at the lines those
formats open with. The same summary rule is gone from FreeBSD
vmstat -i, whose interrupt list can be longer than the window. docker statswithout--no-streamis read: each refresh leaves a
space before the clear-to-end-of-line sequence, which failed the row.- An
intfield, and--type COLUMN=int, keeps an integer past 64 bits
with every digit instead of refusing it with exit 3:ipcs -lprints
a shared memory limit of 2^64 - 4. A+and zeros in front are left
out as they are for a smaller integer. jz runrefuses, before it starts the command,--streamwhen no
variant it could read the output with has a streaming form, and a key
to--extractor--excludethat none of them can have. It used to
run the command first, and with--defineor no output at all it
either wrote[]for the key or stopped the command part way.- A key the definition cannot have is exit 2 whether the input is read
whole or as a stream; read whole, a line the definition could not read
was reported first, with 3. - A command
jz runstarted that fails having printed nothing but blank
lines gets no JSON and its own status, with--defineand with
--streamas without them:--definewrote[], and--stream
added a message about the empty output. Blank output from a command
that succeeds is answered the same way with--streamas without. --stream --extract KEYon a csv or a tsv refuses a key no column has
before writing a record, as the whole document does; it wrote an empty
object per record and then refused the key.jz runreturns the command's status when it failed and its output
lacks a key named to--extract, as it does for every other failure
to read the output; without--streamit returned 2.