Chạy shell script không có biến môi trường


17

Như tôi biết, tập lệnh shell mới chạy kế thừa các biến môi trường. Có cách nào để chặn điều này? (chạy shell mà không thay đổi kế thừa)

Câu trả lời:


21

Có vẻ như bạn có thể thêm tiền tố vào tập lệnh của mình env -iđể xóa môi trường trước khi chạy tập lệnh:

env -i sh test.sh

Từ man env:

-i, --ignore-environment
              start with an empty environment

Không chắc chắn tại sao bạn muốn làm điều này mặc dù ...


Cảm ơn. Điều này đã làm việc! Tôi cần điều này để gọi tập lệnh xây dựng trong IDE mà không ảnh hưởng đến các biến môi trường cấu hình của IDE. Nhưng vẫn còn rất xa để đạt mục tiêu. Điều này có thể giúp ích cho sự tò mò của bạn!
Eonil

Để thêm một trường hợp sử dụng khác: Tôi hiện đang đánh giá cá và zsh như là một thay thế cho bash. Nhưng tôi chưa sẵn sàng để quảng bá vỏ ứng viên làm vỏ đăng nhập của mình (như trong chsh .... Nếu tôi chỉ mở một cửa sổ đầu cuối và chạy zshhoặc fish(có hoặc không -lcó vấn đề gì), nó gây ô nhiễm môi trường của tôi với tất cả các loại biến từ Tôi đã khởi động nó. Thực hiện thủ thuật env -cgiải quyết vấn đề này cho tôi. Tôi làm env -i TERM=xterm-256color $(which fish).
Paidhi

Điều này rất hữu ích nếu bạn có một tác vụ cron bị lỗi do môi trường không được cấu hình đúng và bạn cần kiểm tra nó; cũng là một cách tốt để kiểm tra nếu tập lệnh của bạn đưa ra các giả định về cài đặt môi trường. Cảm ơn!
đánh bại

Một nơi khả dĩ khác có thể hữu ích là thử nghiệm một số công việc định kỳ (như công việc định kỳ) để đảm bảo không có sự phụ thuộc môi trường vào tập lệnh. Điều tương tự với các lệnh sẽ được chạy trong tài nguyên "Exec" trong bảng kê khai con rối.
TommyTheKid

1

Một khả năng (mặc dù trông khá xấu xí):

exec -c $SCRIPTsẽ bắt đầu $ SCRIPT với một môi trường trống. (xem man bashtìm kiếm exec \[-cl\]).


1
Điều này hoạt động gần như bằng với env -i, tuy nhiên, tôi chọn sử dụng env -i vì exec dừng thực thi phần còn lại của tập lệnh.
Eonil

-1

Theo tôi biết, câu trả lời là "Không". Bạn có thể ghi đè các biến môi trường trong chính tập lệnh. Giá trị của biến môi trường sẽ chuyển về giá trị ban đầu của nó sau khi tập lệnh được chạy xong. Bạn có thể cần chạy tập lệnh như một tiến trình con: $ this.script.sh & để tránh phải đăng xuất khỏi shell của bạn mỗi lần bạn chạy tập lệnh để đặt lại các biến môi trường của bạn về giá trị ban đầu.

Biên tập:

Từ một poster trước đó, dường như tôi đã sai về điều đó là không thể.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.