diff --git a/hledger/Hledger/Cli/Commands/Run.hs b/hledger/Hledger/Cli/Commands/Run.hs index 370b566bb..cacdf75aa 100644 --- a/hledger/Hledger/Cli/Commands/Run.hs +++ b/hledger/Hledger/Cli/Commands/Run.hs @@ -30,6 +30,7 @@ import Control.Monad (forM_) import Control.Monad.IO.Class (liftIO) import Control.Monad.Extra (concatMapM) +import System.Console.CmdArgs.Explicit (expandArgsAt) import System.Directory (doesFileExist) import System.IO.Unsafe (unsafePerformIO) import System.Console.Haskeline @@ -92,7 +93,7 @@ parseCommand line = runCommand :: (String -> Maybe (Mode RawOpts, CliOpts -> Journal -> IO ())) -> [String] -> IO () runCommand findBuiltinCommand cmdline = do - dbg1IO "running command" cmdline + dbg1IO "runCommand for" cmdline -- # begins a comment, ignore everything after # case cmdline of "echo":args -> putStrLn $ unwords $ args @@ -100,7 +101,11 @@ runCommand findBuiltinCommand cmdline = do case findBuiltinCommand cmdname of Nothing -> putStrLn $ unwords (cmdname:args) Just (cmdmode,cmdaction) -> do - opts <- getHledgerCliOpts' cmdmode args + -- Normally expandArgsAt is done by the Cli.hs, but it stops at the first '--', so we need + -- to do it here as well to make sure that each command can use @ARGFILEs + args' <- expandArgsAt args + dbg1IO "runCommand final args" (cmdname,args') + opts <- getHledgerCliOpts' cmdmode args' withJournalCached opts (cmdaction opts) [] -> return () diff --git a/hledger/Hledger/Cli/Commands/Run.md b/hledger/Hledger/Cli/Commands/Run.md index ed4178536..3d330b4d4 100644 --- a/hledger/Hledger/Cli/Commands/Run.md +++ b/hledger/Hledger/Cli/Commands/Run.md @@ -33,8 +33,6 @@ You can use `#!/usr/bin/env hledger run` in the first line of the file to make i - 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. -- Numeric flags like `-3` do not work, use long form `--depth 3` - - You can pass `-f` to the `run` itself, and also to any commands given after it (or in the command file, or via REPL). When specific command does not have `-f` in its flags, it will use the journal(s) specified in the arguments of `run`. If command does have `-f` flag, this journal would be read and its contents would be cache, so if several commands specify the same `-f` flag, they will read the journal only once. ### Examples: diff --git a/hledger/Hledger/Cli/Commands/Run.txt b/hledger/Hledger/Cli/Commands/Run.txt index 57758c796..e6a06f8de 100644 --- a/hledger/Hledger/Cli/Commands/Run.txt +++ b/hledger/Hledger/Cli/Commands/Run.txt @@ -42,8 +42,6 @@ Caveats: and a gave file name that does not exist, "run" will attempt to interpret it as a command. -- Numeric flags like -3 do not work, use long form --depth 3 - - You can pass -f to the run itself, and also to any commands given after it (or in the command file, or via REPL). When specific command does not have -f in its flags, it will use the journal(s)