.# Discussion
This commit adds support for a '-f'/'--file' option which reads "KEY=VALUE" lines from
a config (or ini) style text file and sets the corresponding environment key. This is
modeled after the same option in the `dotenv` and `godotenv` commands. Notably, this
commit does *not* add automatic loading of ".env" configuration files.
The environment variables set by reading the configuration file are set prior to any
unset (eg, `-u BAR`) or set (eg, `FOO=bar`) actions. Files are loaded in order with
later files overwriting any overlapping environment variables, then, unset actions (in
command line order) are executed, then, finally, set actions (in command line order)
are executed.
[1] [`dotenv`](https://github.com/bkeepers/dotenv)
[2] [`godotenv`](https://github.com/joho/godotenv)
.# Discussion
`env`/`uutils env` didn't support CMD built-in commands (dir, echo, erase, ...),
BAT/CMD files, nor the usual semantics for command search and execution via
PATHEXT (eg, it wouldn't find/execute `batch.BAT` when given just `batch`).
This patch executes the commands via a CMD subshell and fixes all of those issues.
* fixes compile bugs blocking compilation "onig_sys" (required for `expr`) on windows
- MSVC/VS tools are no longer required to be prepped and available on the PATH (via
`vsvarsall` or the "VCX command prompt")
- GNU `gcc` compilation/targets are possible on windows
* restrict onig version to v4.3.2 (or later patches [only]; see discussion)
.# Discussion
onig v4.3.0/v4.3.1 inadvertently introduced a new minimum rust version (requiring
v1.31+; see https://github.com/rust-onig/rust-onig/issues/97). This was repaired with
v4.3.2 (requiring only v1.27.0+), and onig now specifies a rust minimum version that will
stay the same for patches, but may change between minor version increments.
All credit goes to @JJJollyjim in this PR https://github.com/uutils/coreutils/pull/1294, but that PR needs to be rebased over master to be mergeable and hasn't been after multiple weeks.
stdin() is already buffered.
stdin().read_line() calls stdin().lock() behind the hood (see
https://doc.rust-lang.org/src/std/io/stdio.rs.html#274)
Here we are reading user input, prompting them to confirm their action:
it seems useless to handle mutex locking/unlocking explicitely and
beforehand to avoid its overhead.
This commit is related to issue #1103.
Fixes#1295 , making -b act like `du --block-size=1 --apparent-size`, the reason it uses `stat.size` instead of `stat.nlink * stat.size` is explained in #1292 and the fix for that issue #1294 is mirrored by the use of `stat.size` here.