Это мой код:
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)
Что не так?
Это не первая моя попытка попробовать эту библиотеку. Он всегда возвращает одну и ту же ошибку.
итак... какие команды я могу выполнить?
Вы уже пробовали очевидное? note: run with RUST_BACKTRACE=1` переменная среды для отображения обратной трассировки`
@TanveerBadar: Чем поможет обратная трассировка?
В Windows echo — это встроенная команда cmd.exe, а не независимая команда, которую можно запустить из других программ. По сути, если вы можете найти программу с помощью Проводника Windows и запустить ее, то вы можете запустить ее с помощью std::process::Command, иначе вы, вероятно, не сможете.





Если вы можете вызвать echo в своей оболочке, возможно, что он существует только как встроенный в оболочку (это означает, что он обрабатывается непосредственно оболочкой и фактически не запускает программу), поэтому программа echo не может существовать. Command может вызывать только реальные программы. Это может быть в случае с echo в Windows; см. это Вопросы и ответы суперпользователя.
Если у вас есть программа echo, возможно, она не находится в каталоге, указанном в переменной среды PATH, и какой-то сценарий запуска вашей оболочки делает ее доступной.
Если вам абсолютно необходимо вызвать встроенную оболочку, вы можете вызвать исполняемый файл оболочки (cmd.exe, bash и т. д.), каждый из которых поддерживает способ запуска команды оболочки через аргумент. Вот так cmd /C "echo hi", но с Command API.
Другие распространенные команды оболочки могут иметь аналогичные симптомы.
Возможно, эти ссылки могут помочь: для unix и для dos.
но я выполняю другие команды, такие как cls/clear, и получаю ту же ошибку