Получение сообщения «программа не найдена» с помощью Command::new («echo»)

Это мой код:

use std::process::Command;

fn main() {
    let output = Command::new("echo")
    .arg("Hello world")
    .output()
    .expect("Failed to execute command");

    assert_eq!(b"Hello world\n", output.stdout.as_slice());
}

Rust возвращает эту ошибку:

thread 'main' panicked at src\main.rs:7:6:
Failed to execute command: Error { kind: NotFound, message: "program not found" }      
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
error: process didn't exit successfully: `target\debug\pj_testing.exe` (exit code: 101)

Что не так?

Это не первая моя попытка попробовать эту библиотеку. Он всегда возвращает одну и ту же ошибку.


75
1

Ответ:

Решено

Если вы можете вызвать echo в своей оболочке, возможно, что он существует только как встроенный в оболочку (это означает, что он обрабатывается непосредственно оболочкой и фактически не запускает программу), поэтому программа echo не может существовать. Command может вызывать только реальные программы. Это может быть в случае с echo в Windows; см. это Вопросы и ответы суперпользователя.

Если у вас есть программа echo, возможно, она не находится в каталоге, указанном в переменной среды PATH, и какой-то сценарий запуска вашей оболочки делает ее доступной.

Если вам абсолютно необходимо вызвать встроенную оболочку, вы можете вызвать исполняемый файл оболочки (cmd.exe, bash и т. д.), каждый из которых поддерживает способ запуска команды оболочки через аргумент. Вот так cmd /C "echo hi", но с Command API.

Другие распространенные команды оболочки могут иметь аналогичные симптомы.