Cách chuyển các đối số đến tập lệnh bash từ chương trình cpp

Oct 30 2020

Tôi đã tách một quy trình con sau đó gọi một tập lệnh bash bằng cách sử dụng execv, theo cách tôi đang truyền các đối số dòng lệnh cho tập lệnh, Nó không in đối số đầu tiên khi thực hiện echo $1bên trong tập lệnh.

std::string s = std::to_string(c_no);    
char *args[] = {(char *)s.c_str(), NULL};

pid_t pid = fork();
if(pid == 0){
    execv("./ckpnt.sh", &args[0]);
}

coi c_nolà số nguyên bất kỳ.

cách chính xác để làm điều này là gì?

Tôi đã cấp lại liên kết này Làm thế nào để chuyển các đối số dòng lệnh từ chương trình C sang tập lệnh bash? nhưng câu trả lời này sử dụng systemlệnh gọi hệ thống và tôi cố gắng không sử dụng điều đó.

Trả lời

2 Botje Oct 30 2020 at 04:29

Đối số đầu tiên được truyền cho một chương trình là tên của nó, vì vậy hiện tại số của bạn kết thúc bằng $0. argsnên là:

char *args[] = {"./ckpnt.sh", (char *)s.c_str(), NULL};