Исходный файл из ржавчины с помощью команды - PullRequest
1 голос
/ 04 мая 2019

Я использую Command crate для получения файла.Я делаю ls -a, используя тот же ящик команд, прежде чем я получу исходный код.Файл, который должен быть получен, присутствует, когда я перечисляю содержимое каталога.Но когда я получаю исходный код, я получаю сообщение об ошибке «Файл не найден».

Ошибка и журнал:

     Running `target/debug/alias_cli h htop`
.       .alias      Cargo.lock  src
..      .idea       Cargo.toml  target
thread 'main' panicked at 'Failed to source alias file: Os { code: 2, kind: NotFound, message: "No such file or directory" }', libcore/result.rs:1009:5
note: Run with `RUST_BACKTRACE=1` for a backtrace.
./.alias%

Код:

fn source_alias_file(alias_file: &String) -> Result<(), Box<dyn Error>> {
    print!("{}", alias_file);
    Command::new("ls")
        .arg("-a")
        .spawn()
        .expect("Failed to list");

    Command::new("source")
        .arg(alias_file)
        .spawn()
        .expect("Failed to source alias file");

    Ok(())
}

Что здесь не так?

Я могу получить файл напрямую с терминала без каких-либо ошибок.

1 Ответ

3 голосов
/ 04 мая 2019

source - это команда bash, это не программа, поэтому вы не можете вызывать ее так, как вам нужно использовать bash:

Command::new("bash")
    .arg("-c")
    .arg(format!("source {}", alias_file))
    .spawn()
    .expect("Failed to source alias file");
...