hledger/site/argfiles.md

2.8 KiB
Raw Blame History

Save frequently used options

You can save frequently used options and arguments in an argument file, one per line, then reuse them via a @FILE argument on the command line. (hledger 1.4+)

Heres an example. I keep frequently-used options for quick daily reports in a file called simple.args. The name can be anything; I use a .args suffix so I can find these easily. Heres the content of simple.args:

--alias=/:(business|personal):/=:
--alias=/:(bank|cash|online):/=:
--alias=/:bofi:/=:b
--alias=/:unify:/=:u
--alias=/:wf:/=:w
-2
cur:.

The format is one command-line flag or command-line argument per line. Now if I write @simple.args in a hledger command line, it will be replaced by all of the above options/flags:

These options are just an example, but in case youre wondering: they remove some detail, giving simplified reports which are easier for me to read at a glance.

  • the aliases simplify the chart of accounts, hiding some distinctions (eg business vs. personal) and flattening some bank account names
  • the -2 depth flag limits account depth to 2, hiding deeper subaccounts
  • the cur:. argument shows only single-character currencies, hiding a bunch of cluttersome commodities I dont want to see

Usage

Generate a balance report showing the simplified accounts:

$ hledger bal @simple.args

Start a live-updating hledger-ui showing the simplified asset accounts only:

$ hledger-ui --watch @simple.args assets

Options in the arguments file can be overridden by similar options later on the command line, in the usual way. Eg, to show just a little more account detail:

$ hledger bal @simple.args -3

Quoting

Special characters in the arguments file may need quoted, following the usual rules of your shell (bash, fish etc.), but theyll need one less level of quoting than on the command line. I think:

$ hledger bal @simple.args

is equivalent to writing:

$ hledger bal "--alias=/:(business|personal):/=:" "--alias=/:(bank|cash|online):/=:" "--alias=/:bofi:/=:b" "--alias=/:unify:/=:u" "--alias=/:wf:/=:w" "-2" "cur:."

So in this example, using the bash shell, the | pipe character does not need to be quoted in the arguments file (and should not be).

Suppressing this feature

If you actually need to write an argument beginning with @, eg lets say you have an account pattern beginning with that character, youll want a way to disable this feature. On unix systems at least, you can do that by inserting a -- argument first. Eg:

$ hledger bal @somewhere.com       # looks for additional arguments in the ./somewhere.com file
$ hledger bal -- @somewhere.com    # matches account names containing "@somewhere.com"

On windows, this might or might not require a hledger built with GHC 8.2+. (Let us know.)