File-aware dynamic command runner.
Xf try to find a file from the current directory and upwards, and execute different command according to the different file found.
cargo install xf
Download from Github Releases, unzip and add xf to your $PATH.
Xf loads rules from configuration file.
The default path of configuration file is
$HOME/.xf, which can be specified with theXF_CONFIG_PATHenvironment variable.
Rule format is:
<file>: <command>
<file> tell xf what file to find, <command> tell xf what command to execute if found.
xfhas a built-in lowest priority rule:Xfile: $file $@
Configure the following rules:
Taskfile: bash $file $@
Run xf foo.
xf try to find for Taskfile file in the current directory, and if found, execute bash $file foo .
If not found, continue finding for Xfile file in the current directory, if found, execute Xfile foo (built-in rule).
If not found, enter the parent directory to continue this process.
File matching rules:
-
Ignore case.
Xfilecan match filesxfile,xFile. -
Find the filename that contains the rule filename.
Xfilecan match the filesXfile.sh,Xfile.cmd.
The following built-in variables can be used in the command part of rule.
$@- pass-through command line parameters$file- file path$fileDir- file directory, process's cwd will be set to this value$currentDir- the current directory
These variables(exclude $@) are also synced to environment variables:
$file=>XF_FILE$fileDir=>XF_FILE_DIR$currentDir=>XF_CURRENT_DIR
Actually, the command name affect builtin-rule and environment variable prefix.
If you rename executable file xf to task:
-
The built-in rule will be
Taskfile: $file $@ -
The default configuration file path will be
$HOME/.task. -
The environment variable
XF_CONFIG_PATHwill beTASK_CONFIG_PATH. -
The environment variable for
$filewill beTASK_FILE。
Copyright (c) 2022 xf-developers.
argc is made available under the terms of either the MIT License or the Apache License 2.0, at your option.
See the LICENSE-APACHE and LICENSE-MIT files for license details.