Câu hỏi Làm cách nào để thêm biến môi trường?


Tôi đang chạy Ubuntu 11.04. Tôi sử dụng thiết bị đầu cuối để bắt đầu một phiên bash, và tôi muốn thêm một biến môi trường:

$r@hajt:~$ env THEVAR=/example

Nhưng nó không hoạt động. Nó cho thấy tất cả các biến với THEVAR là biến cuối cùng, nhưng một cuộc gọi khác env không hiển thị THEVAR nữa không- env | grep THEVAR không trả lại gì cả.

Tương tự, các tập lệnh có xuất (export THEVAR=/example) hoặc các bài tập biến khác (THEVAR=/example) không thêm biến môi trường.

Tôi biết tôi đang làm điều gì đó sai, tôi biết nó phải là một cái gì đó đơn giản, nhưng tôi chỉ không thể tìm thấy những gì.

CẬP NHẬT: Ý nghĩa thực sự của câu hỏi của tôi là câu hỏi này: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell

(Dù sao tôi sẽ chọn câu trả lời được bình chọn nhiều nhất và để lại tiêu đề đã chỉnh sửa - không phải là những gì tôi đã hỏi)

env chạy một chương trình trong môi trường đã sửa đổi, sau đó loại bỏ tất cả các thay đổi.


224
2017-08-27 00:22


gốc


Khi được xác định / xuất trong .bashrc, nó hoạt động đúng. - huff
có thể trùng lặp Biến môi trường của Google Earth và $ BROWSER - Isaiah
Làm thế nào về THEVAR=/example? - Oleh Prypin
Cái còn lại là về các biến toàn cục, cái này không thêm giới hạn như vậy. Tôi sẽ giữ nó riêng biệt. - Lekensteyn
help.ubuntu.com/community/EnvironmentVariables - huff


Các câu trả lời:


Để đặt biến chỉ có cho shell hiện tại:

VARNAME="my value"

Để đặt nó cho shell hiện tại và tất cả các quy trình bắt đầu từ trình bao hiện tại:

export VARNAME="my value"      # shorter, less portable version

Để đặt nó vĩnh viễn cho tất cả các phiên bash trong tương lai, hãy thêm dòng đó vào .bashrc tập tin của bạn $HOME danh mục.

Để đặt vĩnh viễn và hệ thống rộng (tất cả người dùng, tất cả các quy trình) thêm biến đặt trong / etc / environment:

sudo -H gedit /etc/environment

Tệp này chỉ chấp nhận các phép gán biến như:

VARNAME="my value"

Không sử dụng export từ khóa ở đây.

Bạn cần đăng xuất khỏi người dùng hiện tại và đăng nhập lại để thay đổi biến môi trường diễn ra.


363
2017-08-27 07:50



Shell config files such as ~/.bashrc, ~/.bash_profile, and ~/.bash_login are often suggested for setting environment variables. While this may work on Bash shells for programs started from the shell, variables set in those files are not available by default to programs started from the graphical environment in a desktop session.  help.ubuntu.com/community/EnvironmentVariables - SudoSURoot
Tôi nên thêm dòng cụ thể của mình ở đâu? dưới cùng của trang .bashrc ?! - Mr.Hyde
@ Mr.Hyde có, đó có thể là một nơi hợp lý - Michał Šrajer
Tại sao cái thứ hai kém di động hơn? - UniversallyUniqueID
@BharadwajRaju bởi vì trên một số hệ thống UNIX cũ, người ta chỉ có thể xuất biến được thiết lập sẵn. Ví dụ như Solaris và HP-UX cũ. - Michał Šrajer


Để đặt biến môi trường một lần, hãy sử dụng export lệnh trong dấu nhắc, không phải trong một kịch bản lệnh shell:

$ export THEVAR=/example

Biến sẽ được đặt cho phần còn lại của phiên trình bao hoặc cho đến khi không được đặt.

Để đặt biến môi trường mọi lúc, hãy sử dụng export lệnh trong .bashrc tệp (hoặc tệp khởi tạo thích hợp cho trình bao của bạn).

Để đặt biến môi trường từ tập lệnh, hãy sử dụng export lệnh trong kịch bản, và sau đó source kịch bản. Nếu bạn thực thi kịch bản nó sẽ không hoạt động.

Đối với một lời giải thích về sự khác biệt giữa tìm nguồn cung ứng và thực hiện xem câu trả lời này: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788


21
2017-08-27 07:20



Làm thế nào tôi có thể làm cho nó hoạt động chỉ bằng cách thực hiện kịch bản? Không tìm nguồn cung ứng. - Mithril


Để thêm vĩnh viễn một biến môi trường mới trong Ubuntu (chỉ được thử nghiệm trong 14.04), hãy sử dụng các bước sau:

  1. Mở một thiết bị đầu cuối (bằng cách nhấn CtrlAltT)
  2. sudo -H gedit /etc/environment
  3. Nhập mật khẩu của bạn
  4. Chỉnh sửa tệp văn bản vừa mở:
    ví dụ. nếu bạn muốn thêm FOO=bar, sau đó chỉ cần viết FOO=bar trong một dòng mới
  5. Lưu nó
  6. Sau khi lưu, đăng xuất và đăng nhập lại.
  7. Các thay đổi bắt buộc của bạn được thực hiện.

15
2017-12-07 08:45



Tôi đã làm sạch câu trả lời của bạn loại bỏ các bit nguy hiểm hơn về sudo gedit (Xem askubuntu.com/questions/270006/…) và chmod 777. Sau này không bao giờ nên được thực hiện trên một tập tin cấu hình hệ thống. - muru
Đây là câu trả lời đúng cho một số trường hợp nhất định. Tất cả các phiên, cho dù phiên người dùng hay không sẽ nhận được giá trị của các biến được đặt ở đây. Điều quan trọng cần lưu ý rằng trong khi điều này có thể trông giống như một kịch bản lệnh shell, nó không phải là - nó cho phép bạn chỉ thiết lập các biến môi trường (so với sử dụng các hàm shell như if hoặc là test) - Tom Harrison Jr
Nếu thanh là một chuỗi, tôi có nên đặt nó giữa các dấu ngoặc kép không? Như Foo="bar"? - blue_chip
@blue_chip Không, hoạt động không có dấu ngoặc kép. - Click Upvote
@blue_chip cho biến môi trường, mọi thứ đều là một chuỗi. Bạn chỉ cần báo giá khi nó có dấu cách. - Ruslan


Để có được môi trường / var thay đổi để tồn tại sau khi kịch bản đã hoàn thành, bạn phải sử dụngsource ./script.sh hoặc ký hiệu viết tắt cho nguồn, ".", giống như . ./script.sh

Nguồn sẽ thực thi các lệnh trong kịch bản như thể bạn đã nhập chúng vào ... vì vậy nó thay đổi một số khía cạnh của tập lệnh, chẳng hạn như thoát ... vì vậy nếu tập lệnh của bạn kiểm tra thứ gì đó và quyết định thoát nếu sai, ví dụ: qua gọi điện exit 0, nó sẽ chấm dứt phiên terminal / shell hiện tại của bạn.


3
2018-03-16 15:09



Đây là một câu hỏi rất cũ đã có một câu trả lời được chấp nhận và một vài người khác ... Hãy xem xét, trả lời các câu hỏi gần đây, xin vui lòng ... - NerdOfCode
@NerdOfCode câu trả lời này giải quyết một vấn đề vẫn có liên quan và không có câu trả lời nào khác, kể cả câu trả lời được chấp nhận, đề cập đến nó, theo như tôi thấy ... Có hai huy hiệu có sẵn để cung cấp câu trả lời tốt cho câu hỏi cũ, vì vậy điều này được khuyến khích - Zanna


Nếu bạn đang làm mọi thứ thông qua tập lệnh, một cách dễ dàng để đặt biến môi trường vĩnh viễn được đặt bên dưới câu lệnh trong tập lệnh của bạn,

if [[ ! -d "$MyVar" ]]; then 
    export MyVar="abc"
    echo 'export MyVar="abc"' >> ~/.bashrc
fi

Nếu bạn cần đánh giá các biểu thức như pwd, bạn có thể sử dụng biểu thức này, ví dụ:

echo "export EIGEN_ROOT=\"$(pwd)/eigen\"" >> ~/.bashrc

1
2017-07-12 02:06