Как получить код завершения скрипта Bash, запущенного из программы Rust? - PullRequest
0 голосов
/ 28 октября 2019

Я пытался обернуть голову вокруг нескольких простых реализаций системного программирования, включающих возможность вызова Bash из C и Rust. Мне было любопытно, если бы был способ изменить следующее утверждение, в частности, в Rust, чтобы позволить мне получить возвращаемое значение 4 из скрипта Bash, который выполняется следующим образом:

let status = Command::new("pathtoscript").status().expect("failed to execute process");

Rust String изначально меня смущает, но любая комбинация действий, которая приводит к статусу, дающему мне доступ к значению 4, возвращаемому в родительский процесс, будет great . Заранее большое спасибо за помощь. Я проверил документацию по Rust, но ничего не нашел для того, чтобы получить вещи BACK для родительского процесса, только для дочернего процесса.

Я должен сказать, что само собой разумеется, что приложение записывает в файл и читаетиз этого файла недостаточно или достаточно безопасно.

1 Ответ

0 голосов
/ 28 октября 2019

Если вам нужно код выхода 4, используйте status.code():

use std::process::Command;

fn main() {
    let status = Command::new("./script.sh")
        .status()
        .expect("failed to execute process");
    println!("{}", status.code().unwrap()); // 4
}

Мой script.sh файл:

#!/bin/bash

# Will exit with status of last command.
# exit $?
# echo $?

# Will return 4 to shell.
exit 4

И посмотрите на это тоже:

use std::process::Command;

let status = Command::new("mkdir")
                     .arg("projects")
                     .status()
                     .expect("failed to execute mkdir");

match status.code() {
    Some(code) => println!("Exited with status code: {}", code),
    None       => println!("Process terminated by signal")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...