Đặt các biến môi trường trên OS X

861
Paul Wicks 2008-09-26 10:06.

Cách thích hợp để sửa đổi các biến môi trường như PATH trong OS X là gì?

Tôi đã xem xét trên Google một chút và tìm thấy ba tệp khác nhau để chỉnh sửa:

  • / etc / path
  • ~ / .profile
  • ~ / .tcshrc

Tôi thậm chí không có một số tệp này và tôi khá chắc chắn rằng .tcshrc là sai, vì OS X hiện sử dụng bash. Các biến này, đặc biệt là PATH, được định nghĩa ở đâu?

Tôi đang chạy OS X v10.5 (Leopard).

30 answers

658
Matthew McCullough 2009-02-26 13:42.

Bruno đang đi đúng hướng. Tôi đã thực hiện nghiên cứu sâu rộng và nếu bạn muốn đặt các biến có sẵn trong tất cả các ứng dụng GUI, lựa chọn duy nhất của bạn là /etc/launchd.conf.

Xin lưu ý rằng environment.plist không hoạt động đối với các ứng dụng được khởi chạy qua Spotlight. Điều này được ghi lại bởi Steve Sexton ở đây .

  1. Mở lời nhắc đầu cuối

  2. Nhập sudo vi /etc/launchd.conf(lưu ý: tệp này có thể chưa tồn tại)

  3. Đưa các nội dung như sau vào tệp

    # Set environment variables here so they are available globally to all apps
    # (and Terminal), including those launched via Spotlight.
    #
    # After editing this file run the following command from the terminal to update
    # environment variables globally without needing to reboot.
    # NOTE: You will still need to restart the relevant application (including
    # Terminal) to pick up the changes!
    # grep -E "^setenv" /etc/launchd.conf | xargs -t -L 1 launchctl
    #
    # See http://www.digitaledgesw.com/node/31
    # and http://stackoverflow.com/questions/135688/setting-environment-variables-in-os-x/
    #
    # Note that you must hardcode the paths below, don't use environment variables.
    # You also need to surround multiple values in quotes, see MAVEN_OPTS example below.
    #
    setenv JAVA_VERSION 1.6
    setenv JAVA_HOME /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home
    setenv GROOVY_HOME /Applications/Dev/groovy
    setenv GRAILS_HOME /Applications/Dev/grails
    setenv NEXUS_HOME /Applications/Dev/nexus/nexus-webapp
    setenv JRUBY_HOME /Applications/Dev/jruby
    
    setenv ANT_HOME /Applications/Dev/apache-ant
    setenv ANT_OPTS -Xmx512M
    
    setenv MAVEN_OPTS "-Xmx1024M -XX:MaxPermSize=512m"
    setenv M2_HOME /Applications/Dev/apache-maven
    
    setenv JMETER_HOME /Applications/Dev/jakarta-jmeter
    
  4. Lưu các thay đổi của bạn trong vi và khởi động lại máy Mac của bạn. Hoặc sử dụng lệnh grep/ xargsđược hiển thị trong chú thích mã ở trên.

  5. Chứng minh rằng các biến của bạn đang hoạt động bằng cách mở cửa sổ Terminal và nhập exportvà bạn sẽ thấy các biến mới của mình. Những thứ này cũng sẽ có sẵn trong IntelliJ IDEA và các ứng dụng GUI khác mà bạn khởi chạy qua Spotlight.

262
Matt Curtis 2010-09-21 15:23.

Đừng mong đợi ~ / .launchd.conf hoạt động

Trang người đàn ông cho Launcctl nói rằng nó không bao giờ hoạt động:

CHỨC NĂNG BỊ XÓA VÀ LOẠI BỎ

khởi chạyctl không còn chế độ tương tác, cũng như không chấp nhận lệnh từ stdin. Tệp /etc/launchd.conf không còn được tham khảo cho các lệnh con chạy trong thời gian khởi động sớm; chức năng này đã bị xóa để xem xét bảo mật. Mặc dù có tài liệu cho rằng $ HOME / .launchd.conf sẽ được hỏi ý kiến ​​trước khi thiết lập phiên của người dùng, nhưng chức năng này chưa bao giờ được triển khai.

Cách thiết lập môi trường cho các quy trình mới do Spotlight khởi động (không cần khởi động lại)

Bạn có thể đặt môi trường được dùng bởi launcher (và theo tiện ích mở rộng, mọi thứ bắt đầu từ Spotlight) với launchctl setenv. Ví dụ để đặt đường dẫn:

launchctl setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

Hoặc nếu bạn muốn thiết lập đường dẫn của mình trong .bashrchoặc tương tự, hãy sao chép đường dẫn đó trong Launcd:

PATH=/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin
launchctl setenv PATH $PATH

Không cần phải khởi động lại mặc dù bạn sẽ cần phải khởi động lại một ứng dụng nếu bạn muốn nó tiếp nhận môi trường đã thay đổi.

Điều này bao gồm bất kỳ trình bao nào đã chạy trong Terminal.app, mặc dù nếu bạn ở đó, bạn có thể đặt môi trường trực tiếp hơn, ví dụ với export PATH=/opt/local/bin:/opt/local/sbin:$PATHcho bash hoặc zsh.

Cách giữ các thay đổi sau khi khởi động lại

Phương pháp mới (kể từ 10.10 Yosemite)

Sử dụng launchctl config user path /bin:/usr/bin:/mystuff. Xem man launchctlđể biết thêm thông tin.

Phương pháp trước đó

Trích dẫn trang người đàn ông khởi chạy ở đầu câu trả lời này cho biết tính năng được mô tả ở đây (đọc /etc/launchd.confkhi khởi động) đã bị xóa vì lý do bảo mật, vì vậy ymmv.

Để giữ các thay đổi sau khi khởi động lại, bạn có thể đặt các biến môi trường từ đó /etc/launchd.conf, như sau:

setenv PATH /opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin

launchd.conf được thực thi tự động khi bạn khởi động lại.

Nếu bạn muốn những thay đổi này có hiệu lực ngay bây giờ, bạn nên sử dụng lệnh này để xử lý lại launchd.conf(cảm ơn @mklement về mẹo!)

egrep -v '^\s*#' /etc/launchd.conf | launchctl

Bạn có thể tìm hiểu thêm về launchctlvà cách nó tải launchd.confbằng lệnh man launchctl.

108
tim_yates 2008-09-26 10:08.

Lên đến và bao gồm OS X v10.7 (Lion), bạn có thể đặt chúng trong:

~/.MacOSX/environment.plist

Xem:

  • https://developer.apple.com/legacy/library/qa/qa1067/_index.html
  • https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPRuntimeConfig/Articles/EnvironmentVars.html

Đối với PATH trong Terminal, bạn sẽ có thể thiết lập .bash_profilehoặc .profile(có thể bạn sẽ phải tạo nó)

Đối với OS X v10.8 (Mountain Lion) trở lên, bạn cần sử dụng launchdlaunchctl .

70
Ersin Er 2015-09-05 10:06.

Giải pháp cho cả dòng lệnh và ứng dụng GUI từ một nguồn duy nhất (hoạt động với Mac OS X v10.10 (Yosemite) và Mac OS X v10.11 (El Capitan))

Giả sử bạn có các định nghĩa về biến môi trường theo cách của bạn ~/.bash_profiletrong đoạn mã sau:

export JAVA_HOME="$(/usr/libexec/java_home -v 1.8)" export GOPATH="$HOME/go"
export PATH="$PATH:/usr/local/opt/go/libexec/bin:$GOPATH/bin"
export PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" export MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Chúng tôi cần một Launch Agent sẽ chạy trên mỗi lần đăng nhập và bất kỳ lúc nào theo yêu cầu, sẽ tải các biến này vào phiên người dùng. Chúng tôi cũng sẽ cần một tập lệnh shell để phân tích cú pháp các định nghĩa này và xây dựng các lệnh cần thiết để tác nhân thực thi.

Tạo một tệp có plisthậu tố (ví dụ: có tên osx-env-sync.plist) trong ~/Library/LaunchAgents/thư mục với nội dung sau:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>osx-env-sync</string>
  <key>ProgramArguments</key>
  <array>
    <string>bash</string>
    <string>-l</string>
    <string>-c</string>
    <string>
      $HOME/.osx-env-sync.sh
    </string>
  </array>
  <key>RunAtLoad</key>
  <true/>
</dict>
</plist>

-ltham số là quan trọng ở đây; nó cần thiết để thực thi tập lệnh shell với một trình bao đăng nhập để nó ~/.bash_profileđược lấy nguồn ngay từ đầu trước khi tập lệnh này được thực thi.

Bây giờ, tập lệnh shell. Tạo nó tại ~/.osx-env-sync.shvới các nội dung sau:

grep export $HOME/.bash_profile | while IFS=' =' read ignoreexport envvar ignorevalue; do
  launchctl setenv "${envvar}" "${!envvar}"
done

Đảm bảo rằng tập lệnh shell có thể thực thi được:

chmod +x ~/.osx-env-sync.sh

Bây giờ, tải tác nhân khởi chạy cho phiên hiện tại:

launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

(Re) Khởi chạy ứng dụng GUI và xác minh rằng nó có thể đọc các biến môi trường.

Quá trình thiết lập diễn ra liên tục. Nó sẽ tồn tại khi khởi động lại và đăng nhập lại.

Sau khi thiết lập ban đầu (bạn vừa thực hiện), nếu bạn muốn phản ánh lại bất kỳ thay đổi nào trong ~/.bash_profiletoàn bộ môi trường của bạn, chạy lại launchctl load ...lệnh sẽ không thực hiện những gì bạn muốn; thay vào đó, bạn sẽ nhận được một cảnh báo như sau:

<$HOME>/Library/LaunchAgents/osx-env-sync.plist: Operation already in progress

Để tải lại các biến môi trường của bạn mà không phải trải qua quá trình đăng xuất / đăng nhập, hãy làm như sau:

launchctl unload ~/Library/LaunchAgents/osx-env-sync.plist
launchctl load ~/Library/LaunchAgents/osx-env-sync.plist

Cuối cùng, hãy đảm bảo rằng bạn khởi chạy lại các ứng dụng đã chạy của mình (bao gồm cả Terminal.app) để làm cho chúng biết về những thay đổi.

Tôi cũng đã đẩy mã và giải thích ở đây vào một dự án GitHub: osx-env-sync .

Tôi hy vọng đây sẽ là giải pháp cuối cùng, ít nhất là đối với các phiên bản OS X mới nhất (Yosemite & El Capitan).

56
WoooHaaaa 2011-11-25 18:29.
  1. Làm:

    vim ~/.bash_profile
    

    Tệp có thể không tồn tại (nếu không, bạn có thể tạo nó).

  2. Nhập vào đây và lưu tệp:

    export PATH=$PATH:YOUR_PATH_HERE
    
  3. Chạy

    source ~/.bash_profile
    
35
pajato0 2011-03-27 10:03.

Về cơ bản, có hai vấn đề cần giải quyết khi xử lý các biến môi trường trong OS X. Đầu tiên là khi gọi chương trình từ Spotlight (biểu tượng kính lúp ở bên phải của menu / thanh trạng thái Mac) và thứ hai khi gọi chương trình từ Dock . Gọi chương trình từ một ứng dụng Terminal / tiện ích là tầm thường vì nó đọc môi trường từ các địa điểm vỏ tiêu chuẩn ( ~/.profile, ~/.bash_profile, ~/.bashrc, vv)

Khi gọi các chương trình từ Dock, hãy sử dụng ~/.MacOSX/environment.plistnơi <dict>phần tử chứa một chuỗi các <key>KEY</key><string>theValue</string>phần tử.

Khi gọi các chương trình từ Spotlight, hãy đảm bảo rằng khởi chạy đã được thiết lập với tất cả các cài đặt khóa / giá trị mà bạn yêu cầu.

Để giải quyết đồng thời cả hai vấn đề, tôi sử dụng một mục đăng nhập (được thiết lập thông qua công cụ Tùy chọn Hệ thống) trên tài khoản Người dùng của tôi. Mục đăng nhập là một tập lệnh bash gọi một hàm lisp của Emacs mặc dù tất nhiên người ta có thể sử dụng công cụ tạo tập lệnh yêu thích của họ để thực hiện điều tương tự. Cách tiếp cận này có lợi ích bổ sung là nó hoạt động bất cứ lúc nào và không yêu cầu khởi động lại, tức là người ta có thể chỉnh sửa ~/.profile, chạy mục đăng nhập trong một số trình bao và hiển thị các thay đổi đối với các chương trình mới được gọi, từ Dock hoặc Spotlight.

Chi tiết:

Mục đăng nhập: ~/bin/macosx-startup

#!/bin/bash
bash -l -c "/Applications/Emacs.app/Contents/MacOS/Emacs --batch -l ~/lib/emacs/elisp/macosx/environment-support.el -f generate-environment"

Hàm lisp Emacs: ~/lib/emacs/elisp/macosx/envionment-support.el

;;; Provide support for the environment on Mac OS X

(defun generate-environment ()
  "Dump the current environment into the ~/.MacOSX/environment.plist file."
  ;; The system environment is found in the global variable:
  ;; 'initial-environment' as a list of "KEY=VALUE" pairs.
  (let ((list initial-environment)
        pair start command key value)
    ;; clear out the current environment settings
    (find-file "~/.MacOSX/environment.plist")
    (goto-char (point-min))
    (setq start (search-forward "<dict>\n"))
    (search-forward "</dict>")
    (beginning-of-line)
    (delete-region start (point))
    (while list
      (setq pair (split-string (car list) "=")
            list (cdr list))
      (setq key (nth 0 pair)
            value (nth 1 pair))
      (insert "  <key>" key "</key>\n")
      (insert "  <string>" value "</string>\n")

      ;; Enable this variable in launchd
      (setq command (format "launchctl setenv %s \"%s\"" key value))
      (shell-command command))
    ;; Save the buffer.
    (save-buffer)))

LƯU Ý: Giải pháp này là sự kết hợp của những giải pháp có trước khi tôi thêm vào, đặc biệt là giải pháp được cung cấp bởi Matt Curtis, nhưng tôi đã cố tình cố gắng giữ ~/.bash_profilenền tảng nội dung của mình độc lập và đặt cài đặt của launchdmôi trường (cơ sở chỉ dành cho Mac) vào một tập lệnh riêng biệt .

23
Big Rich 2013-01-16 04:04.

Một giải pháp panel / environment.plist tùy chọn, miễn phí, mã nguồn mở, Mac OS X v10.8 (Mountain Lion) là EnvPane .

Mã nguồn của EnvPane có sẵn trên GitHub . EnvPane có vẻ như nó có các tính năng tương đương với RCEnosystem , tuy nhiên, có vẻ như nó có thể cập nhật các biến được lưu trữ ngay lập tức, tức là không cần khởi động lại hoặc đăng nhập, điều này được hoan nghênh.

Như nhà phát triển đã nêu:

EnvPane là một ngăn tùy chọn dành cho Mac OS X 10.8 (Mountain Lion) cho phép bạn đặt các biến môi trường cho tất cả các chương trình trong cả phiên đồ họa và phiên đầu cuối. Nó không chỉ khôi phục hỗ trợ cho ~ / .MacOSX / environment.plist trong Mountain Lion, nó còn xuất bản các thay đổi của bạn đối với môi trường ngay lập tức mà không cần đăng xuất và đăng nhập lại. <SNIP> EnvPane bao gồm (và tự động cài đặt) a Tác nhân khởi chạy 1) sớm sau khi đăng nhập và 2) bất cứ khi nào ~ / .MacOSX / environment.plist thay đổi. Tác nhân đọc ~ / .MacOSX / environment.plist và xuất các biến môi trường từ tệp đó sang phiên bản khởi chạy của người dùng hiện tại thông qua cùng một API được dùng bởi khởi chạyctl setenv và khởi chạyctl unsetenv.

Tuyên bố từ chối trách nhiệm: Tôi không liên quan gì đến nhà phát triển hoặc dự án của họ.

Tái bút: Tôi thích cái tên này (nghe giống như 'Kết thúc nỗi đau').

18
Flori 2013-01-25 02:30.

Trên Mountain Lion, tất cả /etc/paths/etc/launchd.confchỉnh sửa không tạo ra bất kỳ tác dụng nào!

Diễn đàn nhà phát triển của Apple nói:

"Thay đổi danh sách Info.plist của chính .app để chứa từ điển" LSEnosystem "với các biến môi trường bạn muốn.

~ / .MacOSX / environment.plist không còn được hỗ trợ. "

Vì vậy, tôi đã trực tiếp chỉnh sửa ứng dụng Info.plist(nhấp chuột phải vào "AppName.app" (trong trường hợp này là SourceTree) và sau đó " Show package contents").

Và tôi đã thêm một cặp khóa / dict mới được gọi là:

<key>LSEnvironment</key>
<dict>
     <key>PATH</key>
     <string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/[email protected]/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>

(xem: Tài liệu LaunchServicesKeys tại Apple )

Bây giờ ứng dụng (trong trường hợp của tôi là Sourcetree) sử dụng đường dẫn đã cho và hoạt động với Git 1.9.3 :-)

Tái bút: Tất nhiên bạn phải điều chỉnh mục Path cho phù hợp với nhu cầu đường dẫn cụ thể của bạn.

17
Max Leske 2015-10-02 21:31.

Cập nhật (2017-08-04)

Tính đến (ít nhất) MacOS 10.12.6 (Sierra) phương pháp này dường như đã ngừng làm việc cho Apache httpd (cho cả hai systemvà các usertùy chọn launchctl config). Các chương trình khác dường như không bị ảnh hưởng. Có thể tưởng tượng rằng đây là một lỗi trong httpd.

Câu trả lời ban đầu

Điều này liên quan đến OS X 10.10+ (đặc biệt là 10.11+ do chế độ rootless /usr/binkhông thể ghi được nữa).

Tôi đã đọc ở nhiều nơi rằng việc sử dụng launchctl setenv PATH <new path>để đặt PATHbiến không hoạt động do lỗi trong OS X (điều này có vẻ đúng từ kinh nghiệm cá nhân). Tôi thấy rằng có một cách khác PATHcó thể được đặt cho các ứng dụng không được khởi chạy từ shell :

sudo launchctl config user path <new path>

Tùy chọn này được ghi lại trong trang người đàn ông khởi chạyctl:

cấu hình hệ thống | giá trị thông số người dùng

Đặt thông tin cấu hình liên tục cho các miền Launcd (8). Chỉ có thể định cấu hình miền hệ thống và miền người dùng. Vị trí của bộ lưu trữ liên tục là một chi tiết triển khai và các thay đổi đối với bộ lưu trữ đó chỉ nên được thực hiện thông qua lệnh con này. Cần phải khởi động lại để các thay đổi được thực hiện thông qua lệnh con này có hiệu lực.

[...]

con đường

Đặt biến môi trường PATH cho tất cả các dịch vụ trong miền đích thành giá trị chuỗi. Giá trị chuỗi phải tuân theo định dạng được nêu cho biến môi trường PATH trong môi trường (7). Lưu ý rằng nếu một dịch vụ chỉ định PATH của chính nó, thì biến môi trường dành riêng cho dịch vụ sẽ được ưu tiên.

LƯU Ý: Không thể sử dụng phương tiện này để đặt các biến môi trường chung cho tất cả các dịch vụ trong miền. Nó có chủ đích trong phạm vi môi trường PATH có thể và không có gì khác vì lý do bảo mật.

Tôi đã xác nhận điều này hoạt động với một ứng dụng GUI bắt đầu từ Finder (sử dụng getenvđể lấy PATH). Lưu ý rằng bạn chỉ phải thực hiện việc này một lần và thay đổi sẽ liên tục cho đến khi khởi động lại.

16
Jason T. Miller 2012-07-17 15:46.

Mặc dù các câu trả lời ở đây không phải là "sai", nhưng tôi sẽ thêm một điều khác: không bao giờ thực hiện các thay đổi biến môi trường trong OS X ảnh hưởng đến "tất cả các quy trình" hoặc thậm chí, bên ngoài trình bao, đối với tất cả các quy trình chạy tương tác bởi một người dùng nhất định.

Theo kinh nghiệm của tôi, các thay đổi toàn cầu đối với các biến môi trường như PATH cho tất cả các quy trình thậm chí có nhiều khả năng phá vỡ mọi thứ trên OS X hơn trên Windows. Lý do là, rất nhiều ứng dụng OS X và phần mềm khác (bao gồm, có lẽ đặc biệt là các thành phần của chính hệ điều hành) dựa vào các công cụ dòng lệnh UNIX bên dưới và giả định hoạt động của các phiên bản của các công cụ này được cung cấp cùng với hệ thống, và không nhất thiết phải sử dụng đường dẫn tuyệt đối khi làm như vậy (các nhận xét tương tự áp dụng cho các thư viện được tải động và biến môi trường DYLD_ *). Ví dụ: hãy xem xét rằng các câu trả lời được xếp hạng cao nhất cho các câu hỏi Stack Overflow khác nhau về việc thay thế các phiên bản thông dịch viên do OS X cung cấp như Python và Ruby thường nói "không làm điều này".

OS X thực sự không khác so với các hệ điều hành giống UNIX khác (ví dụ: Linux, FreeBSD và Solaris) về mặt này; lý do rất có thể khiến Apple không cung cấp một cách dễ dàng để làm điều này là vì nó làm hỏng mọi thứ . Trong phạm vi Windows không dễ gặp phải những vấn đề này, đó là do hai nguyên nhân: (1) Phần mềm Windows không có xu hướng dựa vào các công cụ dòng lệnh như phần mềm UNIX và (2) Microsoft đã có một lịch sử sâu rộng về cả "địa ngục DLL" và các vấn đề bảo mật gây ra bởi các thay đổi ảnh hưởng đến tất cả các quy trình mà chúng đã thay đổi hành vi tải động trong các phiên bản Windows mới hơn để hạn chế tác động của các tùy chọn cấu hình "toàn cầu" như PATH.

"Lame" hay không, bạn sẽ có một hệ thống ổn định hơn nhiều nếu bạn hạn chế những thay đổi như vậy trong phạm vi nhỏ hơn.

15
Bruno Ranschaert 2009-01-17 02:12.

Đôi khi tất cả các câu trả lời trước đó chỉ đơn giản là không hoạt động. Nếu bạn muốn có quyền truy cập vào một biến hệ thống (như M2_HOME) trong Eclipse hoặc trong IntelliJ IDEA, điều duy nhất phù hợp với tôi trong trường hợp này là:

Đầu tiên (bước 1) chỉnh sửa /etc/launchd.confđể chứa một dòng như sau: "setenv VAR value" và sau đó (bước 2) khởi động lại.

Chỉ cần sửa đổi .bash_profile sẽ không hoạt động vì trong OS X, các ứng dụng không được khởi động như trong các Unix khác; chúng không kế thừa các biến shell của cha mẹ. Tất cả các sửa đổi khác sẽ không hoạt động vì một lý do mà tôi không biết. Có lẽ ai đó khác có thể làm rõ về điều này.

13
Russell B 2011-07-07 13:59.

Sau khi theo dõi ngăn tùy chọn Biến môi trường và phát hiện ra rằng liên kết bị hỏng và một tìm kiếm trên trang web của Apple dường như cho thấy họ đã quên nó ... Tôi bắt đầu quay lại đường mòn của quá trình khởi chạy khó nắm bắt.

Trên hệ thống của tôi (Mac OS X 10.6.8), có vẻ như các biến được xác định trong environment.plist đang được xuất một cách đáng tin cậy sang các ứng dụng được khởi chạy từ Spotlight (thông qua launcher). Vấn đề của tôi là các vars đó không được xuất sang các phiên bash mới trong Terminal. Tức là tôi có vấn đề ngược lại như được mô tả ở đây.

LƯU Ý: environment.plist trông giống như JSON, không phải XML, như đã mô tả trước đây

Tôi đã có thể đưa các ứng dụng Spotlight xem các vars bằng cách chỉnh sửa ~ / MacOSX / environment.plist tôi có thể buộc các vars đó vào một phiên Terminal mới bằng cách thêm phần sau vào tệp .profile của mình:

eval $(launchctl export)
10
John Millikin 2008-09-26 10:08.

Bất kỳ các tập tin khởi động các Bash - ~/.bashrc, ~/.bash_profile, ~/.profile. Ngoài ra còn có một số loại tệp kỳ lạ được đặt tên ~/.MacOSX/environment.plistcho các biến môi trường trong các ứng dụng GUI.

10
courtlandj 2014-02-28 06:53.

Giống như câu trả lời mà Matt Curtis đã đưa ra, tôi đặt các biến môi trường thông qua Launcctl, nhưng tôi bọc nó trong một hàm có tên là export, để bất cứ khi nào tôi xuất một biến giống như bình thường trong .bash_profile của mình, nó cũng được đặt bởi Launcctl. Đây là những gì tôi làm:

  1. .Bash_profile của tôi chỉ bao gồm một dòng, (Đây chỉ là sở thích cá nhân.)

    source .bashrc
    
  2. .Bashrc của tôi có cái này:

    function export()
    {
        builtin export "[email protected]" if [[ ${#@} -eq 1 && "${@//[^=]/}" ]] then launchctl setenv "${@%%=*}" "${@#*=}" elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${[email protected]}"
        fi
    }
    
    export -f export
    
  3. Ở trên sẽ làm quá tải "xuất" của nội trang Bash và sẽ xuất mọi thứ bình thường (bạn sẽ thấy tôi xuất "xuất" với nó!), Sau đó đặt chúng đúng cách cho môi trường ứng dụng OS X thông qua khởi chạy, cho dù bạn sử dụng bất kỳ cách nào sau đây:

    export LC_CTYPE=en_US.UTF-8
    # ~$ launchctl getenv LC_CTYPE # en_US.UTF-8 PATH="/usr/local/bin:${PATH}"
    PATH="/usr/local/opt/coreutils/libexec/gnubin:${PATH}" export PATH # ~$ launchctl getenv PATH
    # /usr/local/opt/coreutils/libexec/gnubin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
    export CXX_FLAGS="-mmacosx-version-min=10.9"
    # ~$ launchctl getenv CXX_FLAGS
    # -mmacosx-version-min=10.9
    
  4. Bằng cách này, tôi không phải gửi mọi biến tới launcher mỗi lần và tôi có thể thiết lập .bash_profile / .bashrc theo cách tôi muốn. Mở cửa sổ đầu cuối, kiểm tra các biến môi trường mà bạn quan tâm launchctl getenv myVar, thay đổi thứ gì đó trong .bash_profile / .bashrc của bạn, đóng cửa sổ đầu cuối và mở lại, kiểm tra lại biến bằng Launcctl và voilá, nó đã thay đổi.

  5. Một lần nữa, giống như các giải pháp khác cho thế giới hậu Mountain Lion, để bất kỳ biến môi trường mới nào khả dụng cho ứng dụng, bạn cần khởi chạy hoặc khởi chạy lại chúng sau khi thay đổi.

10
wired00 2013-09-24 17:24.

Đây là một cách rất đơn giản để làm những gì bạn muốn. Trong trường hợp của tôi, Gradle đang hoạt động (dành cho Android Studio).

  • Mở Terminal.
  • Chạy lệnh sau:

    sudo nano /etc/paths hoặc là sudo vim /etc/paths

  • Nhập mật khẩu của bạn, khi được nhắc.

  • Đi tới cuối tệp và nhập đường dẫn bạn muốn thêm.
  • Nhấn Control+ Xđể thoát.
  • Nhập 'Y' để lưu bộ đệm đã sửa đổi.
  • Mở một cửa sổ dòng lệnh mới, sau đó nhập:

    echo $PATH

Bạn sẽ thấy đường dẫn mới được nối vào cuối PATH.

Tôi nhận được những chi tiết này từ bài đăng này:

Thêm vào PATH trên Mac OS X 10.8 Mountain Lion trở lên

8
Tom Teman 2010-12-03 04:37.

Tôi nghĩ OP đang tìm kiếm một giải pháp đơn giản, giống Windows.

Của bạn đây:

http://www.apple.com/downloads/macosx/system_disk_utilities/environmentvariablepreferencepane.html

7
Claudio Floreani 2014-11-10 05:36.

Ngắn gọn và rõ ràng về mục đích của mỗi tệp

  • ~/.profile có nguồn gốc mỗi khi Terminal.app được khởi chạy
  • ~/.bashrc là nơi "truyền thống" tất cả các câu lệnh xuất cho môi trường Bash được thiết lập
  • /etc/paths là tệp chính trong Mac OS chứa danh sách các đường dẫn mặc định để xây dựng biến môi trường PATH cho tất cả người dùng
  • /etc/paths.d/ chứa các tệp chứa các đường dẫn tìm kiếm bổ sung

Các chương trình không phải thiết bị đầu cuối không kế thừa các biến PATH và MANPATH trên toàn hệ thống mà thiết bị đầu cuối của bạn thực hiện! Để thiết lập môi trường cho tất cả các quy trình được khởi chạy bởi một người dùng cụ thể, do đó làm cho các biến môi trường có sẵn cho các ứng dụng GUI của Mac OS X, các biến đó phải được xác định trong của bạn ~/.MacOSX/environment.plist(Apple Technical Q&A QA1067)

Sử dụng dòng lệnh sau để đồng bộ hóa của bạn environment.plistvới /etc/paths:

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"
6
David 2018-01-08 07:32.

/etc/launchd.conf không được sử dụng trong OS X v10.10 (Yosemite), OS X v10.11 (El Capitan), macOS v10.12 (Sierra) hoặc macOS v10.13 (High Sierra).


Từ launchctltrang người đàn ông:

/etc/launchd.conf file is no longer consulted for subcommands to run during early boot time;
this functionality was removed for security considerations.

Phương pháp được mô tả trong Câu trả lời khác nhau này phù hợp với tôi (sau khi khởi động lại): các ứng dụng được khởi chạy từ Dock hoặc từ các biến môi trường kế thừa Spotlight mà tôi đã thiết lập ~/Library/LaunchAgents/my.startup.plist. (Trong trường hợp của tôi, tôi cần phải đặt LANG, thành en_US.UTF-8, cho một plugin Sublime Text.)

5
Nicolas Wu 2012-03-23 01:16.

Các $PATHbiến cũng tuỳ thuộc vào path_helper, do đó làm cho việc sử dụng các /etc/pathstập tin và các tập tin trong /etc/paths.d.

Mô tả kỹ lưỡng hơn có thể được tìm thấy trong PATH và các vấn đề môi trường khác trong Leopard (2008-11)

3
Fernando Martínez 2014-01-25 15:55.

Nó đơn giản:

Chỉnh sửa ~ / .profile và đặt các biến của bạn như sau

$ vim ~ / .profile

Trong hồ sơ đưa:

MY_ENV_VAR = giá trị

  1. Lưu (: wq)

  2. Khởi động lại thiết bị đầu cuối (Thoát và mở lại)

  3. Đảm bảo rằng tất cả đều ổn:

$ echo $ MY_ENV_VAR

giá trị $


3
mmaibaum 2008-09-26 10:09.

Đối với một sửa đổi người dùng, hãy sử dụng ~/.profilenhững sửa đổi bạn đã liệt kê. Liên kết sau giải thích khi nào các tệp khác nhau được đọc bởi Bash.

http://telin.ugent.be/~slippens/drupal/bashrc_and_others

Nếu bạn muốn đặt biến môi trường cho các ứng dụng gui, bạn cần tệp ~ / .MacOSX / environment.plist

3
mike511 2008-09-26 11:12.

Chà, tôi không chắc về tệp /etc/paths~/.MacOSX/environment.plisttệp. Đó là những điều mới.

Nhưng với Bash, bạn nên biết rằng điều đó .bashrcđược thực thi với mọi lệnh gọi trình bao mới và .bash_profilechỉ được thực thi một lần khi khởi động.

Tôi không biết mức độ thường xuyên xảy ra với Mac OS X. Tôi nghĩ rằng sự khác biệt đã được chia nhỏ với hệ thống cửa sổ khởi chạy mọi thứ.

Cá nhân tôi loại bỏ sự nhầm lẫn bằng cách tạo một .bashrctệp với mọi thứ tôi cần và sau đó làm:

ln -s .bashrc .bash_profile
3
MiB 2011-02-07 14:12.

Một điều cần lưu ý ngoài các phương pháp được đề xuất là, ít nhất trong OS X 10.5 (Leopard), các biến được đặt trong launchd.confsẽ được hợp nhất với các cài đặt được thực hiện trong .profile. Tôi cho rằng điều này cũng có thể hợp lệ cho các cài đặt ~/.MacOSX/environment.plist, nhưng tôi chưa xác minh.

3
Charaf JRA 2013-12-20 01:54.

Thiết lập biến môi trường PATH của bạn trên Mac OS

Mở chương trình Terminal (chương trình này nằm trong thư mục Ứng dụng / Tiện ích của bạn theo mặc định). Chạy lệnh sau

touch ~/.bash_profile; open ~/.bash_profile

Thao tác này sẽ mở tệp trong trình soạn thảo văn bản mặc định của bạn.

Đối với Android SDK làm ví dụ:

Bạn cần thêm đường dẫn vào thư mục công cụ và nền tảng SDK Android của mình. Trong ví dụ của tôi, tôi sẽ sử dụng "/ Development / android-sdk-macosx" làm thư mục SDK được cài đặt trong. Thêm dòng sau:

export PATH=${PATH}:/Development/android-sdk-macosx/platform-tools:/Development/android-sdk-macosx/tools

Lưu tệp và thoát khỏi trình soạn thảo văn bản. Thực thi .bash_profile của bạn để cập nhật PATH của bạn:

source ~/.bash_profile

Bây giờ mỗi khi bạn mở chương trình Terminal, PATH của bạn sẽ bao gồm SDK Android.

3
CodeOverRide 2014-10-09 08:56.

Chỉ cần làm điều này thực sự dễ dàng và nhanh chóng. Đầu tiên tạo một ~ / .bash_profile từ terminal:

touch .bash_profile

sau đó

open -a TextEdit.app .bash_profile

thêm vào

export TOMCAT_HOME=/Library/Tomcat/Home

lưu tài liệu và bạn đã hoàn tất.

2
francois.robert 2014-02-18 06:25.

Nó khá đơn giản. Chỉnh sửa tệp .profile(vi, nano , Sublime Text hoặc trình soạn thảo văn bản khác) tệp. Bạn có thể tìm thấy nó tại ~/thư mục (thư mục người dùng) và đặt như thế này:

export MY_VAR=[your value here]

Ví dụ với nhà Java:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

Lưu nó và quay trở lại thiết bị đầu cuối.

Bạn có thể tải lại nó bằng:

source .profile

Hoặc đóng và mở cửa sổ đầu cuối của bạn.

2
ZOXIS 2015-01-22 12:49.

Có hai loại vỏ đang chơi ở đây.

  • Không đăng nhập: .bashrc được tải lại mỗi khi bạn bắt đầu một bản sao mới của Bash
  • Đăng nhập: .profile chỉ được tải khi bạn đăng nhập hoặc yêu cầu Bash tải nó và sử dụng nó như một trình bao đăng nhập.

Điều quan trọng cần hiểu ở đây là với Bash, tệp .bashrcchỉ được đọc bởi một trình bao tương tác và không đăng nhập, và bạn sẽ thấy rằng mọi người thường tải .bashrcvào .bash_profileđể khắc phục hạn chế này.

Bây giờ bạn đã có những hiểu biết cơ bản, hãy chuyển sang cách tôi sẽ khuyên bạn thiết lập nó.

  • .profile: tạo nó không tồn tại. Đặt thiết lập PATH của bạn vào đó.
  • .bashrc: tạo nếu không tồn tại. Đặt tất cả bí danh và phương thức tùy chỉnh của bạn vào đó.
  • .bash_profile: tạo nếu không tồn tại. Đặt những thứ sau vào đó.

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#
2
Koray Tugay 2015-04-28 10:53.

Đăng nhập Shells

/etc/profile

Đầu tiên, trình bao thực hiện các lệnh trong tệp /etc/profile. Người dùng làm việc với đặc quyền root có thể thiết lập tệp này để thiết lập các đặc điểm mặc định trên toàn hệ thống cho người dùng đang chạy Bash.

.bash_profile
.bash_login
.profile

Tiếp theo, trình bao tìm kiếm ~/.bash_profile, ~/.bash_login~/.profile(~ / là viết tắt của thư mục chính của bạn), theo thứ tự đó, thực hiện các lệnh trong tệp đầu tiên mà nó tìm thấy. Bạn có thể đặt lệnh vào một trong các tệp này để ghi đè các giá trị mặc định đã đặt /etc/profile. Một trình bao chạy trên một thiết bị đầu cuối ảo không thực thi các lệnh trong các tệp này.

.bash_logout

Khi bạn đăng xuất, bash thực hiện các lệnh trong ~/.bash_logouttệp. Tệp này thường chứa các lệnh dọn dẹp sau một phiên, chẳng hạn như các lệnh xóa tệp tạm thời.

Vỏ phi ký quỹ tương tác

/etc/bashrc

Mặc dù không được gọi trực tiếp bằng bash, nhưng nhiều ~/.bashrctệp sẽ gọi /etc/bashrc. Thiết lập này cho phép người dùng làm việc với đặc quyền root thiết lập các đặc điểm mặc định trên toàn hệ thống cho các shell bash nonlogin.

.bashrc

Một trình bao nonlogin tương tác thực hiện các lệnh trong ~/.bashrctệp. Thông thường, một tệp khởi động cho trình bao đăng nhập, chẳng hạn như .bash_profile, chạy tệp này, do đó, cả trình bao đăng nhập và không phải đăng nhập đều chạy các lệnh trong .bashrc.

Vì các lệnh trong .bashrccó thể được thực thi nhiều lần và vì các biểu mẫu con kế thừa các biến đã xuất, nên bạn nên đặt các lệnh bổ sung vào các biến hiện có trong .bash_profiletệp.

2
suther 2018-10-16 10:00.

Tất cả điều kỳ diệu trên iOS chỉ đi kèm với việc sử dụng sourcetệp, nơi bạn xuất các biến môi trường của mình.

Ví dụ:

Bạn có thể tạo một tệp như thế này:

export bim=fooo
export bom=bar

Lưu tệp này dưới dạng bimbom.envvà thực hiện source ./bimbom.ev. Voilá, bạn đã có các biến môi trường của mình.

Kiểm tra chúng bằng:

echo $bim
1
Rabi 2011-07-11 01:31.

Đối với Bash, hãy thử thêm các biến môi trường của bạn vào tệp /etc/profileđể cung cấp chúng cho tất cả người dùng. Không cần khởi động lại, chỉ cần bắt đầu một phiên Terminal mới.

Related questions

MORE COOL STUFF

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett chia tay chồng sau 3 ngày bên nhau và vẫn kết hôn với anh ấy 25 năm sau

Cate Blanchett đã bất chấp những lời khuyên hẹn hò điển hình khi cô gặp chồng mình.

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Tại sao Michael Sheen là một diễn viên phi lợi nhuận

Michael Sheen là một diễn viên phi lợi nhuận nhưng chính xác thì điều đó có nghĩa là gì?

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Hallmark Star Colin Egglesfield Các món ăn gây xúc động mạnh đối với người hâm mộ tại RomaDrama Live! [Loại trừ]

Ngôi sao của Hallmark Colin Egglesfield chia sẻ về những cuộc gặp gỡ với người hâm mộ ly kỳ tại RomaDrama Live! cộng với chương trình INSPIRE của anh ấy tại đại hội.

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Tại sao bạn không thể phát trực tuyến 'chương trình truyền hình phía Bắc'

Bạn sẽ phải phủi sạch đầu đĩa Blu-ray hoặc DVD để xem tại sao Northern Exposure trở thành một trong những chương trình nổi tiếng nhất của thập niên 90.

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

8 công dụng tuyệt vời của Baking Soda và Giấm

8 công dụng tuyệt vời của Baking Soda và Giấm

Bạn biết đấy, hai sản phẩm này là nguồn điện để làm sạch, riêng chúng. Nhưng cùng với nhau, chúng có một loạt công dụng hoàn toàn khác.

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Hạn hán, biến đổi khí hậu đe dọa tương lai của thủy điện Hoa Kỳ

Thủy điện rất cần thiết cho lưới điện của Hoa Kỳ, nhưng nó chỉ tạo ra năng lượng khi có nước di chuyển. Bao nhiêu nhà máy thủy điện có thể gặp nguy hiểm khi các hồ và sông cạn kiệt?

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Quyên góp tóc của bạn để giúp giữ nước sạch của chúng tôi

Tóc tỉa từ các tiệm và các khoản quyên góp cá nhân có thể được tái sử dụng như những tấm thảm thấm dầu và giúp bảo vệ môi trường.

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Trong Saturday Night Live, The Bachelor is Bland và Tina Fey trở lại với vai 'Crazy' Sarah Palin

Sau khi Sarah Palin tán thành Donald Trump vào đầu tuần này, gần như không thể tránh khỏi việc Tina Fey sẽ trở lại Saturday Night Live để thăm lại ấn tượng Palin cổ điển của cô. Và Fey chắc chắn đã không làm thất vọng, cô ấy đã đưa ra một lời khen ngợi không hề nhẹ về bài phát biểu chứng thực Iowa quanh co và khó hiểu của Palin trong khi Trump của Darrell Hammond đưa ra bình luận xuyên suốt.

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Đây có phải là sự khởi đầu cho sự kết thúc của việc giam giữ Brittney Griner?

Brittney Griner (r.) Ngay từ đầu, thân phận của Brittney Griner đã là tình huống con tin Mỹ độc nhất trong lịch sử hiện đại.

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Tom Brady là bộ tứ vệ đầu tiên cuối cùng có thể giúp Julio Jones có hơn 10 lần chạm bóng trong một mùa giải

Chúng ta có thể thấy nhiều hơn nữa về một Julio Jones khỏe mạnh trong khu vực cuối năm nay. John Parker Wilson, Greg McElroy, A.

Đó phải là Đức

Đó phải là Đức

Đối với đội tuyển Anh, không có kẻ thủ ác nào lớn hơn Hầu hết các cổ động viên Anh, nếu không muốn nói là tất cả, hẳn sẽ phải gật gù khi tiếng còi mãn cuộc của trận bán kết lượt về W Euro 2022 vang lên. Bởi vì nó báo hiệu rằng Đức sẽ chờ đợi ở Wembley trong trận chung kết với Anh và là điều duy nhất giữa Anh và chiếc cúp lớn đầu tiên của đội tuyển nữ.

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Forced to Borrow Paris' 'I Love Paris' Sweatshirt After 'Airline Loses All [My] Luggage'

Nicky Hilton Rothschild's luggage got lost, but luckily she has an incredible closet to shop: Sister Paris Hilton's!

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa

Kate Middleton dành một ngày bên bờ nước ở London, cùng với Jennifer Lopez, Julianne Hough và hơn thế nữa. Từ Hollywood đến New York và mọi nơi ở giữa, hãy xem các ngôi sao yêu thích của bạn đang làm gì!

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

17 tuổi bị đâm chết trong khi 4 người khác bị thương trong một cuộc tấn công bằng dao trên sông Wisconsin

Các nhà điều tra đang xem xét liệu nhóm và nghi phạm có biết nhau trước vụ tấn công hay không

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Thanh thiếu niên, Gia đình Florida Hội đồng quản trị trường học về Luật 'Không nói đồng tính': 'Buộc chúng tôi tự kiểm duyệt'

Vụ kiện, nêu tên một số học khu, lập luận rằng dự luật "Không nói đồng tính" được ban hành gần đây của Florida "có hiệu quả im lặng và xóa bỏ học sinh và gia đình LGBTQ +"

Đường băng hạ cánh

Đường băng hạ cánh

Cuối hè đầu thu là mùa hoài niệm. Những chiếc đèn đường chiếu ánh sáng của chúng qua những con đường đẫm mưa, và những chiếc lá dưới chân - màu đỏ cam tắt trong bóng chạng vạng - là lời nhắc nhở về những ngày đã qua.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Hãy tưởng tượng tạo ra một chiến lược nội dung thực sự CHUYỂN ĐỔI. Nó có thể.

Vào năm 2021, tôi khuyến khích bạn suy nghĩ lại mọi thứ bạn biết về khách hàng mà bạn phục vụ và những câu chuyện bạn kể cho họ. Lùi lại.

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Sự mất mát của voi ma mút đã mở ra trái tim tôi để yêu

Vào ngày sinh nhật thứ 9 của Felix The Cat, tôi nhớ về một trong những mất mát lớn nhất trong cuộc đời trưởng thành của tôi - Sophie của tôi vào năm 2013. Tôi đã viết bài luận này và chia sẻ nó trên nền tảng này một thời gian ngắn vào năm 2013.

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Khi bạn không thể trở thành người mà Internet muốn bạn trở thành

Tôi ghét từ "tàu đắm". Mọi người cảm thấy thoải mái trong la bàn đạo đức của riêng mình, và khi làm như vậy, họ thấy mình vượt qua sự phán xét.

Language