2009-03-14 41 views
32

Các tập lệnh Bash rất hữu ích và có thể tiết kiệm rất nhiều thời gian lập trình. Vậy làm thế nào để bạn bắt đầu một kịch bản bash trong một chương trình C++? Ngoài ra, nếu bạn biết cách làm cho người dùng trở thành siêu người dùng cũng sẽ rất tuyệt. Cảm ơn!Cách chạy tập lệnh bash từ chương trình C++

Trả lời

46

Sử dụng chức năng system.

system("myfile.sh"); // myfile.sh should be chmod +x 
+3

Cảm ơn nhưng bạn quên bao gồm: hệ thống ("./ myfile.sh"); – Kredns

+0

Nó sẽ hoạt động mà không cần. nếu thư mục nằm trong đường dẫn của bạn :) –

+2

Thư mục hiện tại '.' * không nên * nằm trong' $ PATH' của bạn. –

13
#include <stdio.h> 
#include <stdlib.h> 

// .... 


system("my_bash_script.sh"); 
+3

Điều gì sẽ xảy ra nếu tập lệnh bash là để lặp lại một số văn bản thành tty? Ví dụ. nếu đó là "con mèo" thì sao? Chương trình c có đầu ra đó không? –

9

Các tiêu chuẩn duy nhất thực hiện bắt buộc cách phụ thuộc là sử dụng system() chức năng từ stdlib.h.

Ngoài ra, nếu bạn biết cách làm cho người dùng trở thành siêu người dùng cũng sẽ tốt.

Bạn có muốn tập lệnh chạy dưới dạng siêu người dùng hay bạn muốn nâng cao đặc quyền của tệp thi hành C? Trước đây có thể được thực hiện với sudo nhưng có một số điều bạn cần biết trước khi bạn có thể sử dụng sudo.

4

StackOverflow: How to execute a command and get output of command within C++?

StackOverflow: (Using fork,pipe,select): ...nobody does things the hard way any more...

Ngoài ra nếu bạn biết làm thế nào để làm cho người sử dụng trở thành siêu người dùng sẽ được tốt đẹp cũng có. Cảm ơn!

sudo. su. chmod 04500. (setuid() & seteuid(), nhưng chúng yêu cầu bạn phải là root. E..g. chmod'ed 04 ***.)

Cẩn thận. Chúng có thể mở các lỗ an ninh "thú vị" ...

Tùy thuộc vào những gì bạn đang làm, bạn có thể không cần root. (Ví dụ: tôi sẽ thường là chmod/chown/dev thiết bị (cổng nối tiếp, v.v.) (dưới sudo root) để tôi có thể sử dụng chúng từ phần mềm của mình mà không bị root. Mặt khác, điều đó không hoạt động rất tốt khi tải/dỡ các mô-đun hạt nhân ...)

0

Vì đây là câu hỏi khá cũ và phương pháp này chưa được thêm (ngoài chức năng gọi system()), tôi đoán sẽ hữu ích khi tạo kịch bản lệnh shell với chính bản thân nhị phân C. Mã trình bao sẽ được đặt bên trong tệp nguồn file.c. Dưới đây là một ví dụ về mã:

#include <stdio.h> 
#include <stdlib.h> 

#define SHELLSCRIPT "\ 
#/bin/bash \n\ 
echo -e \"\" \n\ 
echo -e \"This is a test shell script inside C code!!\" \n\ 
read -p \"press <enter> to continue\" \n\ 
clear\ 
" 

int main() { 

system(SHELLSCRIPT); 
return 0; 
} 

Về cơ bản, trong một nutshell (ý định chơi chữ), chúng ta định nghĩa tên kịch bản, cho thịt ra khỏi kịch bản, kèm theo chúng trong dấu ngoặc kép (trong khi chèn thoát thích hợp để bỏ qua dấu ngoặc kép trong mã shell), và sau đó gọi tên của tập lệnh đó, trong ví dụ này là SHELLSCRIPT sử dụng hàm system() trong main().

Các vấn đề liên quan