diff --git a/hledger/Hledger/Cli/Options.hs b/hledger/Hledger/Cli/Options.hs index e8bff693e..40c881c82 100644 --- a/hledger/Hledger/Cli/Options.hs +++ b/hledger/Hledger/Cli/Options.hs @@ -342,11 +342,13 @@ getHledgerAddonCommands = map (drop (length progname + 1)) `fmap` getHledgerProg getHledgerProgramsInPath :: IO [String] getHledgerProgramsInPath = do pathdirs <- splitOn ":" `fmap` getEnv "PATH" - pathexes <- concat `fmap` mapM getDirectoryContents pathdirs + pathexes <- concat `fmap` mapM getDirectoryContentsSafe pathdirs return $ nub $ sort $ filter (isRight . parsewith hledgerprog) pathexes where hledgerprog = string progname >> char '-' >> many1 (letter <|> char '-') >> eof +getDirectoryContentsSafe d = getDirectoryContents d `catch` (\_ -> return []) + -- | Convert possibly encoded option values to regular unicode strings. decodeRawOpts = map (\(name,val) -> (name, fromPlatformString val))