;doc:run, repl: updates and edits
This commit is contained in:
parent
e9f1e7dbd4
commit
cdbbe40e5b
@ -1,35 +1,55 @@
|
|||||||
## repl
|
## repl
|
||||||
|
|
||||||
Runs hledger commands interactively.
|
Start an interactive prompt, where you can run any of hledger's commands.
|
||||||
|
Data files are parsed just once, so the commands run faster.
|
||||||
This command is EXPERIMENTAL and could change in the future.
|
|
||||||
|
|
||||||
```flags
|
```flags
|
||||||
Flags:
|
Flags:
|
||||||
no command-specific flags
|
no command-specific flags
|
||||||
```
|
```
|
||||||
|
|
||||||
This command starts a read-eval-print loop (REPL) where you can enter commands interactively. To exit REPL, use "exit" or "quit", or send EOF.
|
This command is experimental and could change in the future.
|
||||||
|
|
||||||
It could also accept commands from standard input, if you pipe commands into it.
|
`hledger repl` starts a read-eval-print loop (REPL) where you can enter commands interactively.
|
||||||
|
As with the `run` command, each input file (or each input file/input options combination) is parsed just once,
|
||||||
|
so commands will run more quickly than if you ran them individually at the command line.
|
||||||
|
|
||||||
The commands will run more quickly than if run individually, because the input files would be parsed only once.
|
Also like `run`, the input file(s) specified for the `repl` command will be the default input for all interactive commands,
|
||||||
|
you can override this temporarily by specifying an `-f` option in particular commands,
|
||||||
|
and commands will not see any changes made to input files (eg by `add`) until you exit and restart the REPL.
|
||||||
|
|
||||||
Syntax of the commands is intentionally simple:
|
The command syntax is the same as with `run`:
|
||||||
- each line is a single hledger command
|
|
||||||
- empty lines are skipped
|
|
||||||
- everything after `#` is considered to be a comment and will be ignored, and will not be printed out
|
|
||||||
- `echo <text>` will print out `<text>`
|
|
||||||
|
|
||||||
You can use single or double quotes to quote arguments that need it ('like this' or "like this").
|
- enter one hledger command at a time, without the usual `hledger` first word
|
||||||
|
- empty lines and comment text from `#` to end of line are ignored
|
||||||
|
- use single or double quotes to quote arguments when needed
|
||||||
|
- type `exit` or `quit` or control-D to exit the REPL.
|
||||||
|
|
||||||
### Caveats:
|
While it is running, the REPL remembers your command history, and you can navigate in the usual ways:
|
||||||
|
- Keypad or Emacs navigation keys to edit the current command line
|
||||||
|
- UP/DOWN or control-P/control-N to step back/forward through history
|
||||||
|
- control-R to search for a past command, etc.
|
||||||
|
|
||||||
- `Repl`, like any other command, will load the input file(s) (specified by `LEDGER_FILE` or by `-f` arguments). The contents of those files would be used by all the commands that `repl` runs. If you want a particular command to use a different input file, you can use `-f` flag for that particular command. This will override (not add) the input for that particular command. All the input files would be cached, and would be read only once.
|
The `commands` and `help` commands, and the command help flags (`CMD --tldr`, `CMD -h/--help`, `CMD --info`, `CMD --man`),
|
||||||
|
work in the usual way, and can be useful.
|
||||||
|
|
||||||
### Examples:
|
You can type control-C to cancel a long-running command (but only once; typing it a second time will exit the REPL).
|
||||||
|
|
||||||
To start the REPL:
|
And in most shells you can type control-Z to exit temporarily to the shell (and `fg` to return to the REPL).
|
||||||
|
|
||||||
|
### Caveats
|
||||||
|
|
||||||
|
You may find some differences in behaviour between `run` command lines and normal hledger command lines.
|
||||||
|
For example, in the REPL,
|
||||||
|
|
||||||
|
- the command name must be written first, options afterward
|
||||||
|
- full command names or official abbreviations (as in the command list) must be used
|
||||||
|
- options parsing with addon commands might be less flexible than the CLI
|
||||||
|
- the `stats` command gives false timings, currently
|
||||||
|
|
||||||
|
### Examples
|
||||||
|
|
||||||
|
Start the REPL:
|
||||||
```cli
|
```cli
|
||||||
hledger repl
|
hledger repl
|
||||||
```
|
```
|
||||||
@ -37,8 +57,3 @@ or
|
|||||||
```cli
|
```cli
|
||||||
hledger repl -f some.journal
|
hledger repl -f some.journal
|
||||||
```
|
```
|
||||||
|
|
||||||
To pipe commands into REPL:
|
|
||||||
```cli
|
|
||||||
(echo "files"; echo "stats") | hledger repl -f some.journal
|
|
||||||
```
|
|
||||||
|
|||||||
@ -1,57 +1,68 @@
|
|||||||
## run
|
## run
|
||||||
|
|
||||||
Runs a sequence of hledger commands on the same input file(s), taking them from the command line or from file(s).
|
Run a sequence of hledger commands, provided as files or command line arguments.
|
||||||
|
Data files are parsed just once, so the commands run faster.
|
||||||
This command is EXPERIMENTAL and syntax could change in the future.
|
|
||||||
|
|
||||||
```flags
|
```flags
|
||||||
Flags:
|
Flags:
|
||||||
no command-specific flags
|
no command-specific flags
|
||||||
```
|
```
|
||||||
|
|
||||||
The commands will run more quickly than if run individually, because the input files would be parsed only once.
|
This command is experimental and could change in the future.
|
||||||
|
|
||||||
"run" has three ways of invocation:
|
You can use `run` in three ways:
|
||||||
|
|
||||||
- when all positional arguments of "run" are valid file names, "run" will read commands from these files, in order: `run -f some.journal file1.txt file2.txt file3.txt`.
|
- `hledger run -- CMD1 -- CMD2 -- CMD3` - read commands from the command line, separated by `--`
|
||||||
|
- `hledger run SCRIPTFILE1 SCRIPTFILE2` - read commands from one or more files
|
||||||
|
- `cat SCRIPTFILE1 | hledger run` - read commands from standard input.
|
||||||
|
|
||||||
- commands could be specified directly on the command line. All commands (including the very first one) should be preceded by argument "--": `run -f some.journal -- cmd1 -- cmd2 -- cmd3`.
|
`run` first loads the input file(s) specified by `LEDGER_FILE` or by `-f` options, in the usual way.
|
||||||
|
Then it runs each command in turn, each using the same input data.
|
||||||
|
But if you want a particular command to use different input, you can specify an `-f` option within that command.
|
||||||
|
This will override (not add to) the default input, just for that command.
|
||||||
|
|
||||||
- it could also accept commands from standard input, if you don't provide an positional arguments and pipe commands into it.
|
Each input file (more precisely, each combination of input file and input options) is parsed only once.
|
||||||
|
This means that commands will not see any changes made to these files, until the next run.
|
||||||
|
But the commands will run more quickly than if run individually (typically about twice as fast).
|
||||||
|
|
||||||
Syntax of the command is intentionally simple:
|
Command scripts, whether in a file or written on the command line, have a simple syntax:
|
||||||
- each line read from a file is a single hledger command
|
|
||||||
- empty lines are skipped
|
|
||||||
- everything after `#` is considered to be a comment and will be ignored, and will not be printed out
|
|
||||||
- `echo <text>` will print out `<text>`
|
|
||||||
- `run` is a valid command to use as well, so you can have `run` call `run` if you want to.
|
|
||||||
|
|
||||||
You can use single or double quotes to quote arguments that need it ('like this' or "like this").
|
- each line may contain a single hledger command and its arguments, without the usual `hledger` first word
|
||||||
|
- empty lines are ignored
|
||||||
|
- text from `#` to end of line is a comment, and ignored
|
||||||
|
- you can use single or double quotes to quote arguments when needed, as on the command line
|
||||||
|
- these extra commands are available: `echo TEXT` prints some text, and `exit` or `quit` ends the run.
|
||||||
|
|
||||||
You can use `#!/usr/bin/env hledger run` in the first line of the file to make it a runnable script. If this complains about "binary `hledger run` not found", use `/usr/bin/env -S hledger run`.
|
On unix systems you can use `#!/usr/bin/env hledger run` in the first line of a command file to make it a runnable script.
|
||||||
|
If that gives an error, use `#!/usr/bin/env -S hledger run`.
|
||||||
|
|
||||||
### Caveats:
|
It's ok to use the `run` command recursively within a command script.
|
||||||
|
|
||||||
- If you meant to provide file name as an argument, but made a mistake and a gave file name that does not exist, "run" will attempt to interpret it as a command.
|
### Caveats
|
||||||
|
|
||||||
- `Run`, like any other command, will load the input file(s) (specified by `LEDGER_FILE` or by `-f` arguments). The contents of those files would be used by all the commands that `run` runs. If you want a particular command to use a different input file, you can use `-f` flag for that particular command. This will override (not add) the input for that particular command. All the input files would be cached, and would be read only once.
|
You may find some differences in behaviour between `run` command lines and normal hledger command lines.
|
||||||
|
For example, with `run`,
|
||||||
|
|
||||||
### Examples:
|
- the command name must be written first, options afterward
|
||||||
|
- full command names or official abbreviations (as in the command list) must be used
|
||||||
|
|
||||||
Pipe commands into `run`, one per line:
|
### Examples
|
||||||
|
|
||||||
|
Run commands specified on the command line:
|
||||||
```cli
|
```cli
|
||||||
(echo "files"; echo "stats") | hledger repl -f some.journal
|
hledger -f some.journal run -- balance assets --depth 2 -- balance liabilities -f /some/other.journal --depth 3 --transpose -- stats
|
||||||
|
```
|
||||||
|
This would load `some.journal`, run `balance assets --depth 2` on it, then run `balance liabilities --depth 3 --transpose` on `/some/other.journal`, and finally run `stats` on `some.journal`
|
||||||
|
|
||||||
|
Run commands from standard input:
|
||||||
|
```cli
|
||||||
|
(echo "files"; echo "stats") | hledger -f some.journal run
|
||||||
```
|
```
|
||||||
|
|
||||||
To provide commands on the command line, separate them with `--` (including the first one):
|
Provide commands as a runnable script:
|
||||||
```cli
|
|
||||||
hledger run -f some.journal -- balance assets --depth 2 -- balance liabilities -f /some/other.journal --depth 3 --transpose -- stats
|
|
||||||
```
|
|
||||||
This would load `some.journal`, run `balance assets --depth 2` on it, then run `balance liabilities --depth 3 --transpose` on `/some/other.journal`, and finally will run `stats` on `some.journal`
|
|
||||||
|
|
||||||
To provide commands in the file, as a runnable scripts:
|
|
||||||
```cli
|
```cli
|
||||||
#!/usr/bin/env -S hledger run -f some.journal
|
#!/usr/bin/env -S hledger run -f some.journal
|
||||||
|
|
||||||
echo "List of accounts in some.journal"
|
echo "List of accounts in some.journal"
|
||||||
accounts
|
accounts
|
||||||
|
|
||||||
@ -64,4 +75,3 @@ balance liabilities -f /some/other.journal --depth 3 --transpose
|
|||||||
echo "Commands from another.script, applied to another.journal"
|
echo "Commands from another.script, applied to another.journal"
|
||||||
run -f another.journal another.script
|
run -f another.journal another.script
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user