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


849

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 trên Google một chút và tìm thấy ba tệp khác nhau để chỉnh sửa:

  • / etc / đường dẫn
  • ~ /.
  • ~ / .tcshrc

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

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


env "switch.1.disabled=true" open -n /Applications/Eclipse.app/để khởi chạy ứng dụng GUI với môi trường hệ thống thiết lập mới.
Hồng

Câu trả lời:


652

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, tùy chọn duy nhất của bạn là /etc/launchd.conf.

Xin lưu ý rằng môi trường.plist không hoạt động đối với các ứng dụng được khởi chạy qua Spotlight. Đây là tài liệu của Steve Sexton ở đây .

  1. Mở một dấu nhắc thiết bị đầu cuối

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

  3. Đặt nội dung như sau vào tập tin

    # 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 phần bình luận 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. Chúng 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 thông qua Spotlight.


3
Tôi đang nói rằng câu trả lời được chấp nhận (môi trường.plist) đã không thành công đối với tôi. Tôi đã sử dụng thành công phương pháp launchd.conf vào ngày 10.5 và 10.6 trên bốn máy.
Matthew McCullough

54
Có cách nào để làm điều này mà không cần thực hiện một khởi động lại hệ thống ?
sorin

40
Giới hạn được đề cập ở trên áp dụng cho MacOS X 10.5. Tuy nhiên, MacOS X 10.6 không còn giới hạn này nữa và thiết lập các giá trị bên trong môi trường.plist hoạt động tốt ngay cả đối với các ứng dụng được khởi chạy qua đèn chiếu. Vì vậy, câu trả lời được chọn là chính xác cho Snow Leopard ;-)
Louis Jacomet

5
Cài đặt launchd.conflà một cách, nhưng cần khởi động lại (để khởi động lại launchd). Nếu bạn muốn tránh khởi động lại, hãy xem câu trả lời của tôi stackoverflow.com/questions/135688/ Khăn
Matt Curtis

23
Có một số vấn đề với cách tiếp cận launchd được trình bày. Hầu hết là cụ thể cho biến môi trường PATH, nhưng người hỏi đã đề cập cụ thể đến PATH. 1) các mục trong launchd.conf không được áp dụng trong các vỏ tương tác, chẳng hạn như ssh vào hệ thống. 2) có dòng "setenv PATH / testdir" gắn vào PATH trong Terminal.app, nhưng thổi bay tất cả các mục PATH khác trong Môi trường của Ứng dụng OS X. 3) Thực hiện "setenv PATH $ {PATH}: / testdir" trong /etc/launchd.conf không mở rộng đúng cách $ PATH 4) launchd.conf áp dụng cho tất cả người dùng, thay vì chỉ một. Không phải là tôi có bất kỳ soln tốt hơn.

257

Cách đặt môi trường cho các quy trình mới được bắt đầu bởi Spotlight (mà không cần phải khởi động lại)

Bạn có thể đặt môi trường được sử dụng bởi launchd (và, bởi phần 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ự, thì hãy nhân đôi nó trong launchd:

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ó nhận môi trường đã thay đổi.

Điều này bao gồm mọi shell đã 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ụ như với export PATH=/opt/local/bin:/opt/local/sbin:$PATHbash hoặc zsh.

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

Để 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ư vậy:

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 launchctl.conf(cảm ơn @mkuity cho 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.confvới lệnh man launchctl.


2
Một cái rất đẹp! Ưu điểm của việc sử dụng môi trường.plist dường như là OS X tôn vinh nội dung của các tệp đó mà không gặp rắc rối khi phải khởi động thiết bị đầu cuối trước. Dù sao, tôi nghĩ rằng câu trả lời của bạn chủ yếu tập trung vào việc tránh sự cần thiết phải khởi động lại, vì vậy thx cho điều đó.
fotNelton

2
@kapuzineralex Có, nó tránh khởi động lại, nó cũng thay đổi môi trường cho các chương trình bắt đầu từ Spotlight, điều environment.plistnày không làm.
Matt Curtis

2
Thiết lập môi trường theo cách này chỉ có tác dụng với tôi cho đến khi tôi khởi động lại. Biến môi trường không tồn tại sau khi tôi khởi động lại máy mac. Câu trả lời của Matthew đã làm việc hoàn hảo cho tôi.
Shamal Karunarathne

8
@Shamal: Tôi + 1'd nhận xét của bạn nhưng hãy nhớ rằng câu trả lời của Matthew yêu cầu khởi động lại, trong khi tôi đang chỉ ra cách chính xác để thay đổi nó mà không cần khởi động lại. Nếu bạn muốn cả hai, tôi khuyên bạn nên đặt cài đặt đường dẫn của mình trong launchd.conf (để chúng tồn tại trong quá trình khởi động lại), sau đó sử dụng một tập lệnh với cái gì đó như "nguồn /etc/launchctl.conf; launchctl setenv PATH $ PATH", vì vậy bạn cũng có thể "làm mới" khi bạn không muốn khởi động lại.
Matt Curtis

5
@MattCurtis Bạn có thể vui lòng chỉnh sửa câu trả lời của mình trực tiếp để làm rõ rằng trong khi không có yêu cầu khởi động lại, những thay đổi sẽ thực sự bị mất sau khi khởi động lại? Ngoài ra, cách chính xác để áp dụng các thay đổi etc/launchd.conftrước khi khởi động lại sẽ là sử dụng phương pháp tiếp cận trong câu trả lời của @ MatthewMcCullough : egrep "^setenv\ " /etc/launchd.conf | xargs -t -L 1 launchctl.
mkuity0

106

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

~/.MacOSX/environment.plist

Xem:

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

Đối với OS X v10.8 (Mountain Lion) và hơn thế nữa bạn cần sử dụng launchdlaunchctl .


4
Điều này chỉ khi bạn thực sự mong đợi chúng được sử dụng bởi các ứng dụng đồ họa. Vì chúng thường không sử dụng các biến môi trường, nên đây không phải là nơi tốt để đặt chúng.
Chris Hanson

18
Có một số ví dụ rất hay về các ứng dụng đồ họa sử dụng các biến môi trường. Ví dụ như IntelliJ, thích có thể nhìn thấy M2_HOME để biết Maven sống ở đâu. Để làm cho nó nhìn thấy biến, bạn sẽ cần đặt nó trong /etc/launchd.conf thay vì môi trường.plist.
Matthew McCullough

3
Để tham khảo: sử dụng preferences.plistít hơn lý tưởng với OS X 10.5 vì tại thời điểm đó preferences.plistkhông được đọc cho các ứng dụng được khởi chạy qua đèn chiếu, hãy xem bình luận của Louis cho câu trả lời của Matthew và email.esm.psu.edu/pipermail/macosx-emacs/2010-May /002113.html . Đối với OS X 10.6 environment.plisthoạt động giống như nó nên.
Janus

16
Điều này không còn áp dụng cho OSX 10.8 apple.stackexchange.com/questions/57385/iêu
thatsmydceed 23/8 '

1
@tim_yates Bạn có thể vui lòng chỉnh sửa dòng đầu tiên của câu trả lời của mình để đọc "Lên đến và bao gồm cả Lion (10. * 7 *)", cho rằng đó là chính xác? Tôi đã cố gắng thực hiện chỉnh sửa đó thành bản gốc "Up to Mountain Lion" mơ hồ và các nhà phê bình đã thực hiện nó.
mkuity0

67

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ó định nghĩa biến môi trường theo ý ~/.bash_profilemuốn trong đ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 Đại lý khởi chạy sẽ chạy trên mỗi lần đăng nhập và bất cứ 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 ta cũng cần một kịch bản shell để phân tích các định nghĩa này và xây dựng các lệnh cần thiết được thực thi bởi tác nhân.

Tạo một tệp có plisthậu tố (ví dụ như tên osx-env-sync.plist) trong ~/Library/LaunchAgents/thư mục với các 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à rất quan trọng ở đây; nó là cần thiết để thực thi tập lệnh shell với shell đăng nhập để ~/.bash_profilecó nguồn gốc ở vị trí đầu tiên trước khi tập lệnh này được thực thi.

Bây giờ, kịch bản 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

Hãy chắc chắn 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 một ứng dụng GUI và xác minh rằng nó có thể đọc các biến môi trường.

Các thiết lập là liên tục. Nó sẽ tồn tại khởi động lại và relogins.

Sau khi thiết lập ban đầu (mà bạn vừa thực hiện), nếu bạn muốn phản ánh bất kỳ thay đổi nào trong ~/.bash_profiletoàn bộ môi trường của mình, hãy 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 cần thông 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 (bao gồm Terminal.app) để làm cho chúng biết về các thay đổi.

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

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


Hoạt động độc đáo. Hơi lo lắng nếu điều này trở nên phổ biến nếu nó là một lỗ hổng bảo mật
Warren P

3
Giải pháp này là người duy nhất tôi có thể làm việc đúng cách. Giải pháp tuyệt vời. Tôi không thể hiểu tại sao điều này lại quá khó khăn với mac ...
JohnyTex

2
Điều này không hoạt động trên El Capitan, thật không may. Nhận xét của bạn từ github.com/ersiner/osx-env-sync/issues/1#issuecomment-169803508 giải thích rõ vấn đề.
mgol

1
Vì vậy, giải pháp này không hoạt động, /etc/launchd.conf không có hiệu lực, Node.js cài đặt nhị phân của nó thành / usr / local / bin và đường dẫn này không có trong PATH cho các ứng dụng GUI. Do đó, các móc Git sử dụng Node không hoạt động trong các ứng dụng GUI Git như SourceTree ở El Capitan. Điều này thật tồi tệ.
mgol

1
Vấn đề chỉ là về biến PATH. Tôi hy vọng chúng ta có thể tìm ra giải pháp sớm.
Ersin Er

54
  1. Làm:

    vim ~/.bash_profile

    Các tập tin có thể không tồn tại (nếu không, bạn chỉ 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

+1 exportlà những gì tôi sẽ đề xuất, vì BASH không hỗ trợsetenv
vol7ron

Làm việc cho bây giờ. Toàn bộ điều này có vẻ phức tạp hơn nhiều so với tôi nghĩ. Sẽ phải dành thêm một thời gian cho tất cả những điều này sau. Cảm ơn.
Ruto Collins

34

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 các chương trình từ Spotlight (biểu tượng kính lúp ở bên phải của menu Mac / thanh trạng thái) và thứ hai khi gọi các chương trình từ Dock . Gọi các chương trình từ một ứng dụng / tiện ích Terminal là không đáng kể vì nó đọc môi trường từ các vị trí shell 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.plist nơi <dict>phần tử chứa một chuỗi <key>KEY</key><string>theValue</string> phần tử.

Khi gọi các chương trình từ Spotlight, đảm bảo rằng launchd đã được thiết lập với tất cả các cài đặt khóa / giá trị 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 đặt 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 hàm lisp Emacs mặc dù dĩ nhiên người ta có thể sử dụng công cụ kịch bản yêu thích của mình để thực hiện điều tương tự. Cách tiếp cận này có thêm lợi ích 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ố shell và có các thay đổi hiển thị cho 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"

Chức năng lisp của 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à một sự pha trộn của những người đến trước khi tôi thêm tôi, đặc biệt là do Matt Curtis cung cấp, nhưng tôi đã cố tình giữ cho ~/.bash_profilenền tảng nội dung của mình độc lập và đặt cài đặt launchdmôi trường (một cơ sở chỉ dành cho máy Mac) thành một tập lệnh riêng .


20
Ồ Tôi không nói điều này sẽ không hiệu quả, nhưng ... Tôi vừa kinh hoàng vì sự phức tạp cần có để có được một môi trường nhất quán trên OS X.
offby1 ngày

2
Điều này hoạt động tốt nhất trong số tất cả các giải pháp tôi đã thấy cho 10.9. Lỗ hổng duy nhất là, vì các mục đăng nhập chạy theo thứ tự không xác định, nếu Emacs (ví dụ) được khởi chạy khi đăng nhập (ví dụ: vì nó đã mở khi đăng xuất), nên nó sẽ nhất thiết phải có các biến môi trường trừ khi bạn khởi động lại nó , bởi vì nó được khởi chạy trước tập lệnh của bạn.
telotortium

22

Một giải pháp khung / môi trường tùy chọn khác, 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 RCEn Môi trường , tuy nhiên, có vẻ như nó có thể cập nhật các biến được lưu trữ của mình ngay lập tức, tức là không có cần phải khởi động lại hoặc đăng nhập, rất đáng hoan nghênh.

Như tuyên bố của nhà phát triển:

EnvPane là ngăn tùy chọn 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à thiết bị đầu cuối. Nó không chỉ khôi phục hỗ trợ cho ~ / .MacOSX / môi trường.plist trong Mountain Lion, nó còn xuất bản các thay đổi của bạn với môi trường ngay lập tức mà không cần phải đă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 launchd chạy 1) sớm sau khi đăng nhập và 2) bất cứ khi nào ~ / .MacOSX / môi trường.plist thay đổi. Tác nhân đọc ~ / .MacOSX / môi trường.plist và xuất các biến môi trường từ tệp đó sang phiên bản launchd hiện tại của người dùng thông qua cùng API được sử dụng bởi launchctl setenv và launchctl unsetenv.

Tuyên bố miễn trừ trách nhiệm: Tôi không có cách nào liên quan đến nhà phát triển hoặc dự án của anh ấy / cô ấy.

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').


2
EnvPane không thể thiết lập PATH vào lúc này. Để biết thêm chi tiết, xem báo cáo lỗi của tôi: github.com/hschmidt/EnvPane/issues/5
Uwe Günther

Tôi ♥ điều này .. Chỉ có nhược điểm .. mà tôi nghĩ rằng bất kỳ giải pháp nào cũng sẽ là nạn nhân của .. là - phải khởi động lại một quy trình - để kế thừa "môi trường" mới. Thắng wonk.
Alex Gray

2
@sorin: Bạn có thể mở một vấn đề trên trang GitHub với một mô tả về vấn đề bạn đang gặp phải không? EnvPane làm việc cho tôi vào ngày 10.10. Tuyên bố miễn trừ trách nhiệm: Tôi là tác giả của EnvPane.
Hannes

17

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

Kể từ (ít nhất) macOS 10.12.6 (Sierra), phương thức này dường như đã ngừng hoạt động cho Apache httpd (cho cả systemusertùy chọn củalaunchctl config ). Các chương trình khác dường như không bị ảnh hưởng. Có thể hình dung rằng đây là một lỗi trong httpd.

Câu trả lời gốc

Điều này liên quan đến OS X 10.10+ (10.11+ đặc biệt do chế độ không root trong đó /usr/bin không còn có thể ghi được).

Tôi đã đọc ở nhiều nơi sử dụng launchctl setenv PATH <new path>để đặt PATHbiến không hoạt động do lỗi trong OS X (có vẻ đúng với 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ừ trình bao :

sudo launchctl config user path <new path>

Tùy chọn này được ghi lại trong trang man launchctl:

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

Đặt thông tin cấu hình liên tục cho các miền launchd (8). Chỉ tên miền hệ thống và miền người dùng có thể được cấu hình. 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 tiểu ban này. Cần phải khởi động lại để những thay đổi được thực hiện thông qua tiểu ban 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 phù hợp với định dạng được phác thảo 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ó, biến môi trường dành riêng cho dịch vụ sẽ được ưu tiên.

LƯU Ý: Cơ sở này không thể được sử dụng để đặt các biến môi trường chung cho tất cả các dịch vụ trong miền. Nó cố tình nằm trong phạm vi môi trường PATH 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 được 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ẽ được duy trì thông qua việc khởi động lại.


Nó cũng có tác dụng với tôi. sudo launchctl procinfo <gui-pid>cho thấy PATHmôi trường mới được thiết lập . Nhưng sudo launchctl config user path <new path>thực tế được đặt cho tất cả người dùng ... (được xác nhận bằng cách thêm người dùng mới và sử dụng bảng điều khiển python của Sublime Text)
Bossliaw

1
Điều này dường như không có ảnh hưởng đến biến môi trường PATH của các ứng dụng được mở lại khi đăng nhập (được mở khi tắt).
Brecht Machiels

Hấp dẫn. Điều đó có nghĩa là đối với các ứng dụng sẽ được mở lại môi trường (hoặc một tập hợp con) đang được lưu.
Max Leske

@MaxLeske Không, các ứng dụng đã mở lại đang được khởi động trước khi biến môi trường được thay đổi. Vì vậy, đây không chỉ là lần đầu tiên sau khi thực hiện sudo launchctl config user path, điều này xảy ra (mà bạn dường như đang giả định?).
Brecht Machiels

1
@ShlomiSchwartz launchctlkhông không cho phép bạn thiết lập các biến môi trường tùy ý. Các PATHbiến là một ngoại lệ.
Max Leske

17

Trên Mountain Lion tất cả các /etc/paths/etc/launchd.confchỉnh sửa không thực hiện bất kỳ tác dụng!

Diễn đàn nhà phát triển của Apple cho biết:

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

~ / .MacOSX / môi trường.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").

Xem Nội dung đóng gói

Và tôi đã thêm một cặp khóa / dict mới 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/ruby-1.9.3-p362@global/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 LaunchServiceKeys tại Apple )

Nhập mô tả hình ảnh ở đây

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 :-)

PS: Tất nhiên bạn phải điều chỉnh mục Đường dẫn theo nhu cầu đường dẫn cụ thể của mình.


3
Giải pháp này đáp ứng tiêu chuẩn ít xâm nhập nhất trên hệ thống. Cảm ơn.
John Vance

@ John Vance +1 Hoàn toàn đồng ý, những thay đổi toàn hệ thống luôn có rủi ro khi Jason T. Miller giải thích rõ ràng trong câu trả lời của mình
rmcsharry

5
Nó không có tác dụng đối với tôi ở El Capitan. :(
mgol

Trên High Sierra 10.13, nếu tôi sửa đổi Info.plisttệp của ứng dụng thì ứng dụng không tải được:LSOpenURLsWithRole() failed with error -10810 for the file /Applications/Slack.app.
kunjbhai

16

Mặc dù các câu trả lời ở đây không "sai", tôi sẽ thêm một câu khác: không bao giờ 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 vỏ, cho tất cả các quy trình được 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, những 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ó khả năng phá vỡ mọi thứ trên OS X nhiều 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ĐH) dựa vào các công cụ dòng lệnh UNIX dưới vỏ bọc và giả định hành vi của các phiên bản của các công cụ này được cung cấp với hệ thống và không nhất thiết phải sử dụng các đườ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à các biến môi trường DYLD_ *). Ví dụ, hãy xem xét các câu trả lời được xếp hạng cao nhất cho các câu hỏi khác nhau về Stack Overflow về việc thay thế các phiên bản phiên dịch do OS X cung cấp như Python và Ruby thường nói "đừng làm điều này".

OS X thực sự không khác gì các hệ điều hành giống như UNIX khác (ví dụ: Linux, FreeBSD và Solaris) về mặt này; lý do rất có thể Apple không cung cấp một cách dễ dàng để làm điều này là vì nó phá vỡ mọi thứ . Trong phạm vi Windows không dễ gặp phải những vấn đề này, đó là do hai điều: (1) Phần mềm Windows không có xu hướng phụ thuộc vào các công cụ dòng lệnh trong phạm vi mà phần mềm UNIX làm và (2) Microsoft đã có một lịch sử rộng lớn của 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à họ đã 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 rất nhiều nếu bạn hạn chế những thay đổi như vậy ở phạm vi nhỏ hơn.


1
Nói mọi người đừng làm điều họ hỏi làm thế nào không phải là câu trả lời cho câu hỏi họ hỏi. Ngăn chặn mọi người làm điều này cũng là phá vỡ mọi thứ. Apple modus operandi.
frabjous

Thiết lập PATH trong /Applications/App.app/Contents/Info.plist với phím LSEnvironment developer.apple.com/library/archive/documentation/General/... có thể là giải pháp được khuyến cáo hiện hành.
Dave X

15

Đô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ư thế này: "setenv giá trị VAR" 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.


5
Các ứng dụng bắt đầu từ Spotlight hoặc bằng bất kỳ phương tiện nào khác đều có /etc/launchd.conf được đọc bởi quy trình cha mẹ của chúng, do đó đưa ra lựa chọn hấp dẫn về nơi đặt các biến môi trường hiển thị trong tất cả các ứng dụng và trình bao.
Matthew McCullough

1
Xem câu trả lời của tôi cho một giải pháp khác, trong đó tránh khởi động lại - stackoverflow.com/questions/135688/iêu
Matt Curtis

Máy MaxOS 10.6 của tôi không có tệp /etc/launchd.conf. Đây có phải là một điều mới hoặc là một điều lỗi thời như phiên bản này? Hay là máy này bị rối?
peterk

13

Sau khi theo đuổi khung 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 quá trình khởi động khó nắm bắt.

Trên hệ thống của tôi (Mac OS X 10.6.8) dường như biến quy định tại environment.plist đang bị đáng tin cậy xuất khẩu sang các ứng dụng khởi chạy từ Spotlight (thông qua launchd). Vấn đề của tôi là những chiếc bình đó 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 miêu tả ở đây.

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

Tôi đã có thể khiến các ứng dụng Spotlight nhìn thấy các vars bằng cách chỉnh sửa ~ / MacOSX / môi trường.plist tôi đã có thể buộc các vars tương tự vào một phiên Terminal mới bằng cách thêm đoạn sau vào tệp .profile của mình:

eval $(launchctl export)

2
Không khó nắm bắt: RCen môi trường
Gilimanjaro

Mẹo hay về xuất khẩu launchctl. Nhưng tôi sẽ không đặt nó như là vào .profile. Nó sẽ ghi đè $ PATH của bạn với một cái không bao gồm / usr / local / bin. Nhưng bạn có thể sử dụng biểu thức chính quy để chọn các vars bạn quan tâm: `` eval $ (launchctl export | grep '^ my. * =').
mivk

3
Trên máy Mountain Lion mới của tôi (10.8.2), môi trường.plist hoàn toàn vô giá trị. Xem câu trả lời của Matthew để theo dõi đúng. Đó là tất cả về khởi chạy và ứng dụng dòng lệnh launchctl cùng với /etc/launchd.conf. Bạn có thể đọc lên cho mình với man launchd, man launchctlman launchd.conftrong một cửa sổ terminal. Glad Apple luôn cập nhật các trang hướng dẫn, ngay cả khi Thư viện dành cho nhà phát triển Mac bị chậm một chút.
Russell B

10

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 lạ được đặt tên ~/.MacOSX/environment.plistcho các biến môi trường trong các ứng dụng GUI.


10

Giống như câu trả lời Matt Curtis đã đưa ra, tôi đặt các biến môi trường thông qua launchctl, nhưng tôi bọc nó trong một hàm gọi là export, để bất cứ khi nào tôi xuất một biến như bình thường trong .bash_profile của mình, nó cũng được đặt bởi launchctl. Đâ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 "$@"
        if [[ ${#@} -eq 1 && "${@//[^=]/}" ]]
        then
            launchctl setenv "${@%%=*}" "${@#*=}"
        elif [[ ! "${@//[^ ]/}" ]]
        then
            launchctl setenv "${@}" "${!@}"
        fi
    }
    
    export -f export
  3. Ở trên sẽ làm quá tải "xuất khẩu" của 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 launchctl, cho dù bạn có 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 launchctl mỗi lần và tôi có thể cài đặt .bash_profile / .bashrc theo cách tôi muốn. Mở cửa sổ terminal, 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, đóng cửa sổ terminal và mở lại, kiểm tra lại biến với launchctl 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 Lion sau núi, đối với bất kỳ biến môi trường mới nào có sẵn cho các ứ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.


1
Câu trả lời hữu ích - cảm ơn. Tôi vừa cập nhật nó vì giải pháp ban đầu của bạn không xử lý các trường hợp trong đó giá trị của biến môi trường bạn đang đặt có dấu bằng (ví dụ: CXX_FLAGS = "- mmacosx-version-min = 10.9"
Steve Broberg

@SteveBroberg - chỉ cần một thay đổi một ký tự sẽ sửa lỗi regrec Bash mà không cần sed! (Đừng hiểu sai ý tôi, tôi yêu sed, nhưng nó hoạt động và ngắn hơn rất nhiều.)
Courtlandj 2/215

1
Tôi đã nghĩ rằng phải có một cách tốt hơn, nhưng tôi không phải là một bậc thầy bash, và tôi không thể google được %%, ## là gì, v.v.
Steve Broberg

10

Đâ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, nó đã khiến Gradle hoạt động (đối với 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 đến cuối tập tin 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ổ terminal mới, sau đó gõ:

    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 từ bài viết này:

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



7

Để được ngắn gọn và rõ ràng về những gì mỗi tập tin được dự định cho

  • ~/.profile được cung cấp mỗi khi Terminal.app được khởi chạy
  • ~/.bashrc là nơi "theo truyền thống" tất cả các câu lệnh xuất cho môi trường Bash được đặt
  • /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 đường dẫn tìm kiếm bổ sung

Các chương trình không đầ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! Để đặt 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 đó cung cấp các biến môi trường cho các ứng dụng GUI của Mac OS X, các biến đó phải được xác định trong~/.MacOSX/environment.plist (Hỏi đáp kỹ thuật của Apple QA1067)

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

defaults write $HOME/.MacOSX/environment PATH "$(tr '\n' ':' </etc/paths)"

6

/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 này hỏi khác nhau trả lời công trình đối với tôi (sau khi khởi động lại): các ứng dụng khởi chạy từ Dock hoặc từ biến môi trường kế thừa Spotlight mà tôi đặt trong ~/Library/LaunchAgents/my.startup.plist. (Trong trường hợp của tôi, tôi cần thiết để thiết lập LANG, để en_US.UTF-8, đối với một bản Plugin Sublime.)


Khi khởi động lại có một thứ tự tải đảm bảo my.startup.plist sẽ được tải trước khi các ứng dụng từ phiên trước được khởi động lại?
kunjbhai


3

Thật đơn giản:

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

$ vim ~ / .profile

Trong tập tin đặt:

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. Hãy chắc chắn rằng tất cả đều ổn:

$ echo $ MY_ENV_VAR

$ giá trị



3

Đối với một sửa đổi người dùng, sử dụng ~/.profilenhững người bạn đã liệt kê. Liên kết sau giải thích khi 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 / môi trường.plist


3

Vâng, tôi không chắc chắn về các tập tin /etc/paths~/.MacOSX/environment.plist. Đó là những cái mới.

Nhưng với Bash, bạn nên biết rằng nó .bashrcđược thực thi với mọi lời gọi shell mới và .bash_profilechỉ được thực hiện 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 đã bị phá vỡ 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

Một điều cần lưu ý ngoài các cách tiếp cận được đề xuất là, trong OS X 10.5 (Leopard) ít nhất, 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 .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

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 (theo mặc định trong thư mục Ứng dụng / Tiện ích của bạn). Chạy lệnh sau

touch ~/.bash_profile; open ~/.bash_profile

Điều 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 SDK Android làm ví dụ:

Bạn cần thêm đường dẫn vào thư mục công cụ và công cụ 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 mà SDK được cài đặt. 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

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ừ thiết bị đầu cuối:

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 thành


Hoàn hảo. Tôi đã làm theo các bước cho JAVA_HOME, Chỉ cần thêm xuất JAVA_HOME = / Library / Java / JavaVirtualMachines / jdk1.8.0_201.jdk / Nội dung / Trang chủ và thành công thực sự nhanh chóng!
NarendraC

Tuyệt vời @NarendraC!
CodeOverRide

2

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). 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 trang chủ Java:

export JAVA_HOME=/Library/Java/JavaVirtualMachines/current

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

Bạn có thể tải lại với:

source .profile

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


2

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 thông báo rõ ràng cho Bash tải nó và sử dụng nó làm vỏ đăng nhập.

Điều quan trọng cần hiểu ở đây là với Bash, tập tin .bashrcchỉ được đọc bởi một trình bao cả 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để vượt qua giới hạn này.

Bây giờ bạn đã có sự 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 ở đó.
  • .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 sau đây trong đó.

.bash_file:

#!/bin/bash
source ~/.profile # Get the PATH settings
source ~/.bashrc  # Get Aliases and Functions
#

2

Đăng nhập Shell

/etc/profile

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

.bash_profile
.bash_login
.profile

Tiếp theo vẻ bề ngoài vỏ cho ~/.bash_profile, ~/.bash_login~/.profile(~ / là tay ngắn cho thư mục nhà của bạn), theo thứ tự, thực hiện các lệnh trong lần đầu tiên của những tập tin mà nó tìm thấy. Bạn có thể đặt các lệnh trong một trong các tệp này để ghi đè mặc định được đặt /etc/profile. Một shell chạy trên 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 thi các lệnh trong ~/.bash_logout tệp. Tệp này thường giữ các lệnh dọn sạch sau một phiên, chẳng hạn như các lệnh loại bỏ các tệp tạm thời.

Vỏ không tương tác

/etc/bashrc

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

.bashrc

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

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


2

Tất cả các phép thuật trên iOS chỉ đi với việc sử dụng sourcevới tệ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 tin này như bimbom.env, và làm source ./bimbom.ev. Voilá, bạn có các biến môi trường của bạn.

Kiểm tra chúng với:

echo $bim

1

Đố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 phải khởi động lại, chỉ cần bắt đầu một phiên Terminal mới.

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.