Это мой код:
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)
Что не так?
Это не первая моя попытка попробовать эту библиотеку. Он всегда возвращает одну и ту же ошибку.
Если вы можете вызвать echo
в своей оболочке, возможно, что он существует только как встроенный в оболочку (это означает, что он обрабатывается непосредственно оболочкой и фактически не запускает программу), поэтому программа echo
не может существовать. Command
может вызывать только реальные программы. Это может быть в случае с echo
в Windows; см. это Вопросы и ответы суперпользователя.
Если у вас есть программа echo
, возможно, она не находится в каталоге, указанном в переменной среды PATH
, и какой-то сценарий запуска вашей оболочки делает ее доступной.
Если вам абсолютно необходимо вызвать встроенную оболочку, вы можете вызвать исполняемый файл оболочки (cmd.exe
, bash
и т. д.), каждый из которых поддерживает способ запуска команды оболочки через аргумент. Вот так cmd /C "echo hi"
, но с Command
API.
Другие распространенные команды оболочки могут иметь аналогичные симптомы.