Ở đây tôi đã viết một chương trình C thực thi hi.sh
tệp bằng cách sử dụng cuộc gọi system
. Ở đây tôi sử dụng . ./hi.sh
vì vậy tôi muốn thực thi kịch bản này trong cùng một vỏ và sau đó cố gắng để có được biến môi trường bằng cách sử dụng chức năng getenv, nhưng ở đây tôi nhận được đầu ra khác nhau từ những gì tôi mong đợi.Lấy các biến môi trường sử dụng mã C
File hi.sh
chứa
export TEST=10
return
Có nghĩa là khi tôi chạy hi.sh
tập tin này bằng cuộc gọi hệ thống, nó export TEST
đặt giá trị đến 10 trong cùng một vỏ. Sau này, tôi đang cố gắng để có được giá trị này biến nhưng giá trị NULL
nhất định của nó.
Và nếu tôi chạy tập lệnh này theo cách thủ công từ bảng điều khiển như . ./hi.sh
thì nó hoạt động tốt và tôi nhận được 10 giá trị TEST
sử dụng chức năng getenv("TEST")
.
Code:
#include <stdio.h>
int main()
{
system(". ./hi.sh");
char *errcode;
char *env = "TEST";
int errCode;
errcode = getenv(env);
printf("Value is = %s\n",errcode);
if (errcode != NULL) {
errCode =atoi(errcode);
printf("Value is = %d\n",errCode);
}
}
đầu ra:
Value is = (null)
Làm thế nào tôi có thể xuất khẩu biến THI trong vỏ chương trình? Nếu system()
thực hiện các lệnh trong trình bao khác nhau thì làm cách nào tôi có thể sử dụng mã chương trình C để nhận biến môi trường được xuất bởi trình vỏ được gọi thông qua lệnh gọi system()
?
Vậy làm cách nào tôi có thể đạt được mục tiêu này? – user1089679
Làm cách nào để xuất biến TEST thành chương trình Shell? – user1089679
@ user1089679 Nguồn tập lệnh của bạn (thiết lập môi trường) trước khi chạy chương trình C. Đó là cách các biến môi trường được thiết kế để sử dụng. –