it-swarm-vi.tech

Làm cách nào để đặt biến môi trường PATH toàn cầu trên OS X?

Tôi muốn thêm vào biến môi trường PATH toàn cầu trên OS X để tất cả các vỏ người dùng và ứng dụng GUI có cùng môi trường PATH.

Tôi biết tôi có thể nối thêm đường dẫn trong tập lệnh khởi động Shell, nhưng các cài đặt đó không được kế thừa bởi các ứng dụng GUI.

Cách duy nhất tôi tìm thấy cho đến nay là xác định lại biến môi trường PATH trong / etc/launchd.conf:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

Tôi không thể tìm ra một cách để thực sự gắn vào PATH trong launchd.conf.

Tôi hơi lo lắng về phương pháp này, nhưng cho đến nay đây là điều duy nhất hoạt động. Có cách nào tốt hơn?

102
lajos

thông tin GUI của palmer là chính xác, nhưng có một cách dễ bảo trì hơn để sửa đổi đường dẫn mà Shell nhìn thấy. Giống như mediaslave đã nói , bạn có thể chỉnh sửa /etc/paths, nhưng thậm chí tốt hơn bạn có thể thả tệp văn bản vào /etc/paths.d/ có một đường dẫn trong đó và tất cả các shell sẽ xây dựng đường dẫn chính xác.

Ví dụ: trên hệ thống của tôi:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
72
cogg

/etc/launchd.conf

Các launchd.conf file là ** giải pháp hoàn chỉnh duy nhất sẽ hoạt động cho cả dòng lệnh và ứng dụng GUI trên OS X v10.8 (Mountain Lion) và v10.9 (Mavericks ), một ứng dụng sẽ hoạt động với GUI và ứng dụng console cho tất cả người dùng.

Sudo touch /etc/launchd.conf
Sudo nano /etc/launchd.conf

Thêm vào

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

Trong ví dụ trên tôi đã thêm /usr/local/bin đến các giá trị môi trường mặc định cho PATH.

Hãy nhớ rằng tệp này không phải là tập lệnh và bạn không có tùy chọn để sử dụng thay thế. Ngoài ra, để áp dụng những điều này, bạn cần khởi động lại.

Hãy nhớ rằng, tất cả những thứ khác chỉ là một phần giải pháp:

  • environment.plist không hoạt động đối với các ứng dụng được khởi chạy qua Spotlight.
  • /etc/paths - chỉ dành cho bảng điều khiển
  • /etc/csh.cshrc hoặc là /etc/bashrc - chỉ cho một số vỏ

Câu trả lời này dựa trên cùng một câu hỏi từ Đặt biến môi trường trên Mac OS X.

48
sorin

Bạn sẽ phải đặt nó trên cơ sở Shell-by-Shell; Các shell giống như Bash và csh không chia sẻ cùng một tệp cấu hình và cú pháp để điều chỉnh PATH.

Cố gắng làm điều này trong launchctl sẽ không hoạt động, vì các biến môi trường được đặt khi đăng nhập; chúng không tồn tại hệ thống rộng rãi trong Unix ngoài phiên Shell.

Vì vậy, bạn sẽ muốn thêm

setenv PATH "$PATH:/add/my/extra/path"

thành /etc/csh.cshrc

export PATH="$PATH:/more/paths:/

đến /etc/bashrc.

Nếu bạn muốn các biến môi trường trong các ứng dụng GUI, điều đó phức tạp hơn. Bạn phải tạo tệp .MacOSX/environment.plist Trong thư mục chính của mỗi người dùng. Thư mục .MacOSX Có thể sẽ không tồn tại theo mặc định, vì vậy bạn sẽ phải tạo nó.

Định dạng của tập tin là như vậy:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.Apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

Thông tin khác về environment.plisttrên trang web của Apple .

7
palmer

Bạn có thể chỉnh sửa đường dẫn toàn cầu của mình bằng cách thêm các dòng vào /etc/paths, một đường dẫn trên mỗi dòng.

Sudo nano /etc/paths nên đưa bạn đến đó.

3
manumoomoo

Bạn đã xem trang người đàn ông cho path_helper tiện ích dòng lệnh trên OS X? Tôi đã trả lời câu hỏi hơi liên quan đến SO mà tôi nghĩ bạn có thể thấy hữu ích.

1
ayaz

Tôi không chắc chắn nếu có ai bảo hiểm cách đơn giản nhất và nhất tao nhã . Ít nhất là trên Mac OS X v10.6 (Báo tuyết).

Bối rối với [/etc/|~/.] của [profile|bashrc] tập tin có thể hoạt động, nhưng đó là một phần của hack. Các /etc/paths.d/ thư mục là con đường để đi:

  • Sudo vào trình soạn thảo yêu thích của bạn.
  • Tạo một tệp mới có tên *name* (chỉ không đặt tên cho cái gì đó đã có trong đó) trong /etc/paths.d/ với một đường dẫn trên mỗi dòng:

    /usr/X11/bin
    /Developer/usr/bin
    
  • Sau đó thêm

    eval '/usr/libexec/path_helper -s`
    

    đến profile hoặc bashrc, và bạn nên đi.

1
noboomu

Tôi không chắc tại sao bạn lại sử dụng /etc/launchd.conf như trái ngược với /etc/profile - nhưng tôi không phải là chuyên gia về Mac OS X - Tôi tin bạn rằng tôi chắc chắn rằng nó hoạt động, nhưng launchd là triển khai/thay thế Mac OS X cho init - Mac OS X làm tôi bối rối.

Dù sao, setenv PATH "$PATH:/more/paths:/and/more/paths" sẽ hoạt động (tcsh) và tương đương Shell bẻ khóa là export PATH="$PATH:/more/paths:/and/more/paths" - Tôi không biết làm thế nào launchd có liên quan đến một Shell cụ thể.

Tôi nghĩ rằng tôi đã hỏi nhiều câu hỏi hơn sau đó tôi đã trả lời =)

0
Xerxes

Tôi không chắc nếu launchd chấp nhận điều này, nhưng hãy thử:

setenv PATH "$ PATH:/my/path"
0
user1686