วิธีส่งอาร์กิวเมนต์ไปยัง bash script จากโปรแกรม cpp

Oct 30 2020

ฉันได้แยกกระบวนการย่อยซึ่งเรียกใช้สคริปต์ทุบตีโดยใช้execvวิธีที่ฉันส่งอาร์กิวเมนต์บรรทัดคำสั่งไปยังสคริปต์มันไม่พิมพ์อาร์กิวเมนต์แรกในการทำecho $1ภายในสคริปต์

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]);
}

พิจารณาว่าc_noเป็นจำนวนเต็มใด ๆ

วิธีที่ถูกต้องในการทำเช่นนี้คืออะไร?

ฉันได้อ้างถึงลิงก์นี้แล้วจะส่งอาร์กิวเมนต์บรรทัดคำสั่งจากโปรแกรม C ไปยังสคริปต์ bash ได้อย่างไร แต่คำตอบนี้ใช้การsystemโทรของระบบและฉันพยายามที่จะไม่ใช้สิ่งนั้น

คำตอบ

2 Botje Oct 30 2020 at 04:29

อาร์กิวเมนต์แรกที่ส่งไปยังโปรแกรมคือชื่อดังนั้นปัจจุบันหมายเลขของคุณจึงลงท้ายด้วย$0. argsควรจะเป็น:

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