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+)

Here’s 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. Here’s the content of simple.args:


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.

The options above are just an example, but in case you’re wondering:

  • 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:. query argument shows only single-character currencies, hiding a bunch of cluttersome commodities I don’t want to see

Ie they remove some detail, giving simplified reports which are easier for me to read at a glance.


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


Special characters in the arguments file may need to be quoted, depending on your shell (bash, fish etc.) They’ll 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 did 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 let’s say you have an account pattern beginning with that character, you’ll want a way to disable this feature. On unix systems at least, you can do that by inserting a -- (double hyphen) argument first. Eg:

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

On windows, this double hyphen trick might require a hledger built with GHC 8.2+. (Let us know.)