Morganamilo/paru · error · anyhow::Error

file manager ' ' did not execute successfully

Error message

file manager '{}' did not execute successfully

What it means

run_file_manager launches the configured file manager (e.g. in the review/directory- browsing flow) with command_status; if the process runs but exits non-zero, this ensure fails. The preceding context reports 'failed to execute file manager: <fm>' for spawn failures; this error covers exit-code failures.

Solutions

  1. Test the file manager manually: <fm> <dir> and fix its exit failure
  2. Check fm_flags in paru.conf for invalid options and remove them
  3. Set file manager to a known-working one, e.g. paru.conf: FileManager = ranger

Example fix

// before (paru.conf)
[options]
FileManager = nemo
FmFlags = --bogus-flag
// after
[options]
FileManager = ranger
Defensive patterns

Strategy: try-catch

Validate before calling

command -v "$FM" >/dev/null 2>&1 || echo "file manager missing: $FM"
"$FM" "$DIR" && echo ok || echo "FM exits nonzero"

Try / catch

match run_file_manager(config, fm, dir) {
    Err(e) => {
        eprintln!("{} (check fm_flags and try running the FM manually)", e);
    }
    Ok(()) => {}
}

Prevention

When it happens

Trigger: config.fm (or default) points to a file manager binary that exists but exits with a non-zero status when opened on the build/review directory — e.g. ranger/nautilus failing on the given dir or bad fm_flags.

Common situations: fm_flags in paru.conf containing options the file manager doesn't support; file manager crashing on unusual filenames in the build dir; terminal-based FM run without a TTY.

Related errors


AI-assisted analysis of Morganamilo/paru@9ac3578807 (2026-09-12). Data as JSON: /api/errors/91fd5427c6cca590. Report an issue: GitHub.

Appendix: source

Thrown at src/install.rs:1600

    config: &Config,
    fetch: &aur_fetch::Fetch,
    fm: &str,
    pkgs: &[&str],
) -> Result<tempfile::TempDir> {
    let has_diff = fetch.has_diff(pkgs)?;
    fetch.save_diffs(&has_diff)?;
    let view = tempfile::Builder::new().prefix("aur").tempdir()?;
    fetch.make_view(view.path(), pkgs, &has_diff)?;
    run_file_manager(config, fm, view.path())?;
    Ok(view)
}

fn run_file_manager(config: &Config, fm: &str, dir: &Path) -> Result<()> {
    let mut cmd = Command::new(fm);
    cmd.args(&config.fm_flags).arg(dir).current_dir(dir);
    let ret =
        command_status(&mut cmd).with_context(|| tr!("failed to execute file manager: {}", fm))?;
    ensure!(
        ret.success().is_ok(),
        tr!("file manager '{}' did not execute successfully", fm)
    );
    Ok(())
}

fn print_dir(
    config: &Config,
    pkgdir: &Path,
    path: &Path,
    stdin: &mut impl Write,
    buf: &mut Vec<u8>,
    bat: bool,
    recurse: u32,
) -> Result<()> {
    {
        let c = config.color;
        let has_pkgbuild = path.join("PKGBUILD").exists();

View on GitHub (pinned to 9ac3578807)