จะประกาศตัวแปรสภาพแวดล้อมได้ที่ไหน?


59

สถานที่ที่ถูกต้องสำหรับ:

  1. ตัวแปรสภาพแวดล้อมทั่วโลกหมายถึงการส่งผลกระทบต่อผู้ใช้ทั้งหมดหรือไม่
  2. ตัวแปรสภาวะแวดล้อมเฉพาะผู้ใช้?

คำตอบ:


16

ฉันคิดว่าหน้าวิกิชุมชนบนตัวแปรสภาพแวดล้อมจะช่วยคุณเรียงลำดับ


2
ปัญหาคือเอกสารที่เชื่อมโยงสับสนและ / หรือผิดพลาดในส่วนของตัวแปรที่ผู้ใช้ระบุ ฉันยังคงพยายามหาวิธีที่ไม่เชื่อเรื่องพระเจ้าที่จะทำมัน $ HOME / .profile น่าจะเป็นทางออกที่ดีที่สุด ...
Rmano

16
โปรดวางข้อความหรือสแน็ปช็อตของเนื้อหาที่เชื่อมโยงซึ่งอาจไม่สามารถใช้ได้ในอนาคต!
Nam G VU

4
ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนสำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Thomas Ward

75

เพื่อเพิ่มคำตอบของ sagarchalise ฉันสามารถสรุปสิ่งที่ลิงค์แนะนำเป็นสถานที่ที่เหมาะสมสำหรับการตั้งค่า

สำหรับการตั้งค่าส่วนกลางตัวแปรสภาพแวดล้อมทั่วทั้งระบบ

  • ใช้ /etc/environment
  • อย่าใช้/etc/profileหรือ/etc/bash.bashrc

จากหน้า:

/etc/environment[... ] มีความหมายเฉพาะสำหรับการตั้งค่าตัวแปรสภาพแวดล้อมทั้งระบบ ไม่ใช่ไฟล์สคริปต์ แต่ประกอบด้วยนิพจน์การกำหนดหนึ่งรายการต่อบรรทัด ไฟล์นี้จัดเก็บการตั้งค่าโลแคลและพา ธ ทั่วทั้งระบบ

ใช้/etc/profileเป็นวิธี Unix-y มากไป แต่การทำงานลดลงอย่างมากภายใต้ Ubuntu มันมีอยู่เท่านั้นที่จะชี้ไปและให้รวบรวมรายการจาก/etc/bash.bashrc/etc/profile.d

ในระบบของฉันรายการเพียงรายการเดียวที่น่าสนใจใน profile.d /etc/profile.d/bash_completion.shคือ

สำหรับการตั้งค่าท้องถิ่นหรือต่อผู้ใช้

แนะนำรุ่นก่อนหน้าของหน้า Ubuntu ~/.pam_environmentแต่หน้าปัจจุบันแนะนำว่าหากไม่ได้ผลคุณควรใช้

  • ~/.profile - นี่อาจเป็นไฟล์ที่ดีที่สุดสำหรับวางการกำหนดค่าตัวแปรสภาพแวดล้อมเนื่องจากมันจะถูกดำเนินการโดยอัตโนมัติโดย DisplayManager ในระหว่างกระบวนการเดสก์ท็อปกระบวนการเริ่มต้นเช่นเดียวกับโดยเชลล์การเข้าสู่ระบบเมื่อหนึ่งเข้าสู่ระบบจากคอนโซลต้นฉบับ

  • ~/.bash_profileหรือ~./bash_login- หากมีสิ่งใดสิ่งหนึ่งเหล่านี้อยู่ bash จะเรียกใช้งานมันแทนที่จะ~/.profileเริ่มทำงานเมื่อ bash เป็นเชลล์การเข้าสู่ระบบ ทุบตีจะชอบที่จะ~/.bash_profile ~/.bash_login[... ] ไฟล์เหล่านี้จะไม่มีผลกับเซสชันกราฟิกโดยปริยาย "

  • ~/.bashrc - "... อาจเป็นตำแหน่งที่ง่ายที่สุดในการตั้งค่าตัวแปร"

1
โปรแกรมใดที่อ่าน/etc/environmentและเมื่อใด ดูเหมือนจะไม่ทำงานกับ cron แม้เมื่อใช้SHELL=/bin/bash
SystemParadox

1
ปรากฏว่า / etc / environment เป็นส่วนหนึ่งของ PAM ซึ่งหมายความว่าควรตั้งค่าสภาพแวดล้อมเริ่มต้นสำหรับกระบวนการทั้งหมด cron เป็นพิเศษ (นั่นคือหัก) โดยเฉพาะการเขียนทับสภาพแวดล้อมนี้ด้วยมันเป็นของตัวเอง
SystemParadox

ดังนั้น. bashrc จะทำงานอย่างไร หลังจาก bash_profile แทน. profile
opensas

1
@opensas คุณอาจถามเป็นคำถามแยกต่างหากโดยอ้างอิงจากคำตอบนี้
belacqua

@belacqua สมมติว่าฉันต้องเพิ่มตัวแปรสภาพแวดล้อม 2 ตัวขึ้นไปเพื่อ/etc/environmentชอบJAVA_HOME="/opt/java" และANT_HOME="/opt/ant" วิธีการใช้งาน
Kasun Siyambalapitiya

7

คุณได้:

/ etc / profile: ไฟล์. profile ทั้งระบบสำหรับเชลล์เป้าหมาย (sh (1)) และเชลล์ที่เข้ากันได้กับบอร์น (bash (1), ksh (1), เถ้า (1), ... )

ซึ่งใน Lucid และ Maverick ทำงาน

/etc/profile.d/*.sh

ถ้ามีและถ้าเปลือกของผู้ใช้เป็นทุบตี:

/etc/bash.bashrc

สำหรับสภาพแวดล้อมของผู้ใช้มีอาร์เรย์ที่สับสนเฉพาะกับเชลล์และพิจารณาว่าเป็น "ล็อกอินเชลล์" หรือไม่ หากเปลือกเป็นทุบตี:

   ~/.bash_profile
          The personal initialization file, executed for login shells
   ~/.bashrc
          The individual per-interactive-shell startup file

สำหรับ sh / dash:

$HOME/.profile

สำหรับ zsh ฉันไม่ได้แม้จะพยายามที่จะทำให้ความรู้สึกนี้


5

ตามที่แนะนำในhttps://help.ubuntu.com/community/EnvironmentVariables :

  1. /etc/environmentตัวแปรสภาพแวดล้อมของโลกหมายถึงการส่งผลกระทบต่อผู้ใช้ทุกคนควรจะไปใน

  2. ~/.pam_environmentตัวแปรสภาพแวดล้อมเฉพาะของผู้ใช้ควรจะตั้งอยู่ใน

หลีกเลี่ยงโปรไฟล์และไฟล์ rc สำหรับการตั้งค่าตัวแปรสภาพแวดล้อมบน Ubuntu พวกเขาทำให้ฉันปวดหัวมากกว่าที่ควร

นี่พูดง่ายกว่าทำ แต่;)

เป็นไปได้ว่าคุณอาจพบช่องว่างการกำหนดค่าเดียวกันกับที่มีอยู่สำหรับฉัน ดูวิธีแก้ปัญหาสำหรับการเข้ารหัสที่บ้านด้านล่าง

ของฉัน~/.pam_environment:

PATH            DEFAULT=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:${HOME}/bin
IDEA_JDK        DEFAULT=${HOME}/Applications/jdk

ทำไมเส้นทางแบบคงที่น่าเกลียด? ${PATH}จะไม่ทำงานสำหรับฉัน ฉันปิดกั้นการเข้าสู่ระบบของฉันหลายครั้งพยายามที่จะหลีกเลี่ยงมันดังนั้นฉันจึงติดกับสำเนาคงที่น่าเกลียดของค่าเริ่มต้น :)

วิธีแก้ปัญหาสำหรับโฟลเดอร์บ้านที่เข้ารหัส

ใน Ubuntu ออกรุ่นและรวมถึงแม่นยำ 12.04 Beta 2 หากคุณใช้ไดเรกทอรีบ้านที่เข้ารหัสคุณจะต้องแก้ไข/etc/pam.d/common-sessionเพื่อให้สามารถโหลด~/.pam_environmentได้ เห็นได้ชัดว่าวิธีนี้ใช้ได้กับรุ่นก่อนหน้า แต่ฉันยังไม่ได้ทดสอบ

Guenther Montag (g-montag) เขียนเมื่อ 2010-08-19:

ดูเหมือนว่าจะมีปัญหากับไดเรกทอรีบ้านที่เข้ารหัส ฉันเพิ่ม

เซสชันที่ต้องการ pam_env.so

ในตอนท้ายของ /etc/pam.d/common-session และตอนนี้ ~ / .pam_environment ได้รับการอ่าน บนระบบอื่นที่ไม่มีโฮมไดเร็กตอรีที่เข้ารหัส (เช่น 10.04) ไม่จำเป็นต้องแก้ไข บางทีในกรณีของฉันระบบพยายามอ่าน ~ / .pam_environment ก่อนที่มันจะถูกถอดรหัส

ดัดแปลงมาจากคำตอบของฉันสำหรับผู้ใช้ขั้นสูง: https://superuser.com/a/408373/66856


สิ่งนี้ยังคงผิด: ${HOME}จะไม่ทำงานเช่นกัน .pam_environmentไม่มีการขยายตัวในการเป็น
Detly

2
@detly มีการขยายตัวอยู่.pam_environmentแต่HOMEไม่ได้ตั้งค่าให้เร็วกว่าปกติ หากบรรทัดนั้นอ่านDEFAULT=${PATH}/Applications/jdkแล้วคุณจะเห็นคุณค่าของการPATHแทรกเข้าไป
muru
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.