Bạn chỉ đơn giản là không thể làm điều này. Không có cách nào - quá trình tạo có thể thay đổi môi trường của cha mẹ (hoặc thư mục hiện tại của nó, mà bạn có thể nghĩ đến tiếp theo).
Trong thực tế, thậm chí ít hơn là hạnh phúc hơn bạn nghĩ.
- Không phải tất cả các
make
triển khai đều phản ánh sự gán cho PATH
biến tạo trong môi trường; GNU make (tìm thấy trên Linux và các hệ thống khác), nhưng BSD thì không.
- Mỗi dòng lệnh dưới một mục tiêu chạy trong một khung con riêng biệt. (Ngoại trừ trong một số BSD cũ thực hiện triển khai.) Vì vậy,
export PATH
dòng đang chạy trên một vỏ kết thúc ngay sau đó. Không phải là dòng này sẽ làm bất cứ điều gì ở nơi đầu tiên - nếu PATH
được xác định tại thời điểm đó, đó là vì nó đã ở trong môi trường của vỏ.
Làm là để xây dựng mọi thứ tự động. Nếu bạn muốn đặt các biến cho môi trường tương tác của mình, đây không phải là công cụ bạn nên xem xét. Thay vào đó, hãy viết một đoạn mã shell và tìm nguồn trong shell hiện tại:
. ./define-my-variables.sh
Trong tệp tạo tệp của bạn, hãy tìm tập lệnh trong mọi khung con . Bạn có thể sử dụng dấu gạch chéo ngược để tạo một lệnh dài; nhớ lấy
- Chuỗi backslash-newline bị tước bằng make, vì vậy shell sẽ không thấy một dòng mới ở đó.
- Tuy nhiên, hãy nhớ tiền tố mỗi dòng bằng một tab.
- Thực hiện hành vi lỗi là hủy bỏ nếu một lệnh thất bại. Shell sẽ không làm điều đó theo mặc định và sự thất bại của bất kỳ lệnh nào nhưng lệnh cuối cùng sẽ không được chú ý theo mặc định, vì vậy bạn cần phải chạy
set -e
.
install:
set -e; \
. ./define-my-variables.sh; \
mkdir -p bin; \
…
¹ lưu ý bắt buộc: không có cách nào lành mạnh. Thậm chí từ xa gọi chdir
qua ptrace
từ một trình gỡ lỗi sẽ không làm việc như là với hầu hết vỏ vì họ không muốn có thư mục hiện tại của họ đã thay đổi dưới chân họ.