Một vài vấn đề nảy sinh khi cố gắng tải lại/nguồn ~ /.profile. [Điều này đề cập đến Linux Ubuntu - trong một số trường hợp, chi tiết của các lệnh sẽ khác nhau]
- Bạn có chạy trực tiếp trong thiết bị đầu cuối hoặc trong tập lệnh không?
- Làm thế nào để bạn chạy điều này trong một tập lệnh?
Quảng cáo. 1)
Chạy trực tiếp điều này trong thiết bị đầu cuối có nghĩa là sẽ không có vỏ bọc nào được tạo. Vì vậy, bạn có thể sử dụng hai lệnh:
source ~/.bash_profile
hoặc
. ~/.bash_profile
Trong cả hai trường hợp này sẽ cập nhật các môi trường với các nội dung của file .profile.
Quảng cáo 2) Bạn có thể bắt đầu bất kỳ kịch bản bash hoặc bằng cách gọi
sh myscript.sh
hoặc
. myscript.sh
Trong trường hợp đầu tiên này sẽ tạo ra một subshell đó sẽ không ảnh hưởng đến các biến môi trường của bạn hệ thống và chúng sẽ chỉ hiển thị cho quá trình bán vỏ. Sau khi hoàn thành lệnh subshell, không có phần tử xuất khẩu nào vv sẽ không được áp dụng. ĐÂY LÀ MỘT MÔ PHỎNG VÀ NHỮNG NGUYÊN NHÂN CHUNG LỚN CỦA CÁC NHÀ PHÁT TRIỂN ĐỂ TẤT CẢ LẦN THỜI GIAN.
Để thay đổi của bạn áp dụng trong kịch bản của bạn để có hiệu lực đối với môi trường toàn cầu kịch bản phải được chạy với
.myscript.sh
lệnh.
Để đảm bảo rằng tập lệnh của bạn không được chạy trong một khung con, bạn có thể sử dụng chức năng này. (Ví dụ lần nữa là dành cho vỏ Ubuntu)
#/bin/bash
preventSubshell(){
if [[ $_ != $0 ]]
then
echo "Script is being sourced"
else
echo "Script is a subshell - please run the script by invoking . script.sh command";
exit 1;
fi
}
Tôi hy vọng điều này sẽ xóa một số hiểu lầm phổ biến! : D Chúc may mắn!
Như Ignacio chỉ ra bên dưới, tập lệnh của bạn đang chạy trong một vỏ con. Subshell không thể sửa đổi shell chính (quá trình con không thể thay đổi parent của nó). Vì vậy, bạn cần phải "nguồn" kịch bản bằng cách sử dụng "." lệnh (cũng có thể được viết là "nguồn"). Vì vậy, nếu kịch bản của bạn muốn, nói, sửa đổi các biến môi trường, bạn cần phải làm một cái gì đó như "nguồn myscript" hoặc ". Myscript" (cả hai đều có nghĩa là cùng một điều). Điều này sẽ sửa đổi môi trường shell chính của bạn. (Mà tôi nghĩ là những gì bạn đang cố gắng làm, hãy cho tôi biết nếu điều này là sai.) – bstpierre
Tôi nhận được câu trả lời từ câu hỏi của bạn :) –