จะส่งออกตัวแปรอย่างถาวรใน Linux ได้อย่างไร


156

ฉันกำลังใช้งาน RHEL6 และฉันได้ส่งออกตัวแปรสภาพแวดล้อมเช่นนี้:

export DISPLAY=:0

ตัวแปรนั้นจะหายไปเมื่อปิดเทอร์มินัล ฉันจะเพิ่มสิ่งนี้อย่างถาวรเพื่อให้ค่าตัวแปรนี้มีอยู่เสมอกับผู้ใช้เฉพาะ?

คำตอบ:


172

คุณสามารถเพิ่มเข้าไปในแฟ้มการกำหนดค่าเปลือกของคุณเช่นหรือมากกว่าทั่วโลกใน$HOME/.bashrc /etc/environmentหลังจากเพิ่มบรรทัดเหล่านี้การเปลี่ยนแปลงจะไม่ส่งผลทันทีในระบบที่ใช้ GUI คุณต้องออกจากเทอร์มินัลหรือสร้างขึ้นใหม่และในเซิร์ฟเวอร์ออกจากระบบเซสชันและล็อกอินเพื่อแสดงการเปลี่ยนแปลงเหล่านี้


3
ขอบคุณนั่นเป็นประโยชน์ ฉันจะทำให้การเปลี่ยนแปลงมีผลโดยไม่ต้องรีสตาร์ทได้อย่างไร (ฉันเป็นมือใหม่ Linux)
Bitterblue

6
@ mini-me - ~ / bashrc ถูกดึงทุกครั้งที่คุณเปิดเชลล์ โหลดอย่างชัดเจนใช้sourceเช่น > source ~/.bashrc-
kostja

@kostja สำหรับเชลล์ใหม่ทั้งหมดหรือไม่ หากฉันมี eclipse ที่รันอยู่ก่อนที่จะเปลี่ยนตัวแปร env เหล่านั้นและฉันต้องการให้ eclipse เปลี่ยน vars ฉันต้องรีสตาร์ท eclipse หรือไม่
Bitterblue

1
@ mini-me: สภาพแวดล้อมของกระบวนการมักจะถูกตั้งค่าโดยผู้โทรและเปลี่ยนจากภายในกระบวนการ การเปลี่ยน env จากภายนอกกระบวนการทำงานเป็นเรื่องผิดปกติและไม่สามารถทำได้exportแต่ลองใช้โปรแกรมดีบั๊ก
Antoine

1
@ Mr.Hyde: ปกติแล้วมันไม่สำคัญ ไฟล์จะถูกวิเคราะห์คำจากบนลงล่างดังนั้นหากคำจำกัดความ var ขึ้นอยู่กับอีกไฟล์พวกเขาควรจะเรียงลำดับ ใช่แล้วท้ายไฟล์ก็ดี
แอนทอน

120

คุณต้องแก้ไขสามไฟล์เพื่อตั้งค่าตัวแปรสภาพแวดล้อมถาวรดังนี้:

  • ~ / .bashrc

    เมื่อคุณเปิดหน้าต่างเทอร์มินัลไฟล์นี้จะถูกเรียกใช้ ดังนั้นหากคุณต้องการให้ตัวแปรสภาพแวดล้อมถาวรในหน้าต่างเทอร์มินัลทั้งหมดของคุณคุณต้องเพิ่มบรรทัดต่อไปนี้ในตอนท้ายของไฟล์นี้:
    export DISPLAY = 0

  • ~ / .profile

  • เช่นเดียวกับbashrcคุณต้องใส่บรรทัดคำสั่งที่กล่าวถึงไว้ท้ายไฟล์นี้เพื่อให้ตัวแปรสภาพแวดล้อมของคุณในทุกล็อกอินของระบบปฏิบัติการของคุณ

  • / etc / สภาพแวดล้อม

  • หากคุณต้องการตัวแปรสภาพแวดล้อมในทุก ๆ หน้าต่างหรือแอปพลิเคชัน (ไม่ใช่แค่เทอร์มินัลหน้าต่าง) คุณต้องแก้ไขไฟล์นี้ เพิ่มคำสั่งต่อไปนี้ในตอนท้ายของไฟล์นี้:
    DISPLAY = 0
    โปรดทราบว่าในไฟล์นี้คุณไม่จำเป็นต้องเขียนคำสั่งส่งออก

โดยปกติคุณต้องรีสตาร์ทคอมพิวเตอร์เพื่อใช้การเปลี่ยนแปลงนี้ แต่คุณสามารถใช้การเปลี่ยนแปลงในbashrcและโปรไฟล์โดยคำสั่งเหล่านี้:

$ source ~/.bashrc
$ source ~/.profile

แต่สำหรับ/ etc / environmentคุณไม่มีทางเลือกนอกจากเริ่มต้นใหม่ (เท่าที่ฉันรู้)

  • ทางออกที่ง่าย

  • ฉันเขียนสคริปต์แบบง่าย ๆ สำหรับขั้นตอนนี้เพื่อทำงานทั้งหมดเหล่านั้น คุณเพียงแค่ต้องตั้งชื่อและค่าของตัวแปรสภาพแวดล้อมของคุณ

    #!/bin/bash
    echo "Enter variable name: "
    read variable_name
    echo "Enter variable value: "
    read variable_value
    echo "adding " $variable_name " to environment variables: " $variable_value
    echo "export "$variable_name"="$variable_value>>~/.bashrc
    echo $variable_name"="$variable_value>>~/.profile
    echo $variable_name"="$variable_value>>/etc/environment
    source ~/.bashrc
    source ~/.profile
    echo "do you want to restart your computer to apply changes in /etc/environment file? yes(y)no(n)"
    read restart
    case $restart in
        y) sudo shutdown -r 0;;
        n) echo "don't forget to restart your computer manually";;
    esac
    exit
    

    บันทึกบรรทัดนี้ใน shfile แล้วทำให้มันสามารถเรียกใช้งานได้และเพียงแค่เรียกใช้!


    1
    สคริปต์ทำงานได้ดีมาก ฉันติดตั้ง Ubuntu 14.04 แล้ว ฉันเพียงแค่วางเนื้อหาข้างต้นในไฟล์ที่ว่างเปล่าตั้งชื่อมันinsert_var.shแล้วแล้วchmod -x insert_var.sh bash insert_var.shขอบคุณ
    Brunno Vodola Martins

    ฉันเปิดหน้าต่างเทอร์มินัลใน Ubuntu และป้อนการส่งออก MY_VAR = 1 ตัวแปร MY_VAR นี้จะถูกเก็บไว้ที่ไหน
    vgokul129

    29

    เพิ่มบรรทัดที่คุณหรือ.bashrc .profileตัวแปรที่ตั้งค่า$HOME/.profileนั้นแอ็คทีฟสำหรับผู้ใช้ปัจจุบันตัวแปรที่อยู่ใน/etc/profileนั้นเป็นโกลบอล .bashrcถูกดึงในแต่ละเซสชั่นเริ่มต้นทุบตี


    27

    บนระบบ Ubuntu ให้ใช้ตำแหน่งต่อไปนี้:

    1. ตัวแปรถาวรของระบบทั้งในรูปแบบของการJAVA_PATH=/usr/local/javaจัดเก็บใน

      /etc/environment
      
    2. ตัวแปรถาวรทั้งระบบที่อ้างอิงตัวแปรเช่นที่
      export PATH="$JAVA_PATH:$PATH"เก็บใน

      /etc/.bashrc
      
    3. ตัวแปรถาวรเฉพาะผู้ใช้ในรูปแบบของการPATH DEFAULT=/usr/bin:usr/local/binจัดเก็บใน

      ~/.pam_environment
      

    สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับ # 2, ตรวจสอบเรื่องนี้ Ask คำตอบอูบุนตู หมายเหตุ: # 3 เป็นคำแนะนำของ Ubuntu แต่อาจมีปัญหาด้านความปลอดภัยในโลกแห่งความเป็นจริง


    2

    ตัวอย่างเฉพาะ: ฉันติดตั้ง Java 7 และ Java 6 แล้วฉันต้องเรียกใช้งานบิลด์บางส่วนด้วย 6 และอื่น ๆ ที่มี 7 ดังนั้นฉันต้องแก้ไขแบบไดนามิกJAVA_HOMEเพื่อให้ Maven เลือกสิ่งที่ฉันต้องการสำหรับแต่ละบิลด์ ฉันทำต่อไปนี้:

    • j6.shสคริปต์ที่สร้างขึ้นซึ่งจะทำการส่งออกJAVA_HOME=...พา ธ ไปยัง j6 install ...
    • จากนั้นตามที่แนะนำโดยหนึ่งในความคิดเห็นข้างต้นเมื่อใดก็ตามที่ฉันต้องการ J6 สำหรับบิลด์ฉันรันซอร์สj6.shในเทอร์มินัลคำสั่งนั้น ๆ โดยค่าเริ่มต้นฉันJAVA_HOMEถูกตั้งค่าเป็น J7

    หวังว่านี่จะช่วยได้


    1

    หากเหมาะสมกับทุกคนต่อไปนี้เป็นคำแนะนำสั้น ๆ สำหรับการเพิ่มตัวแปรสภาพแวดล้อมอย่างถาวร

    vi ~/.bash_profile
    

    เพิ่มตัวแปรลงในไฟล์:

    export DISPLAY=:0
    export JAVA_HOME=~/opt/openjdk11
    

    ใช้การเปลี่ยนแปลงทั้งหมดทันที:

    source ~/.bash_profile
    

    ที่มา: https://www.serverlab.ca/tutorials/linux/administr-linux/how-to-set-environment-variables-in-linux/

    โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
    Licensed under cc by-sa 3.0 with attribution required.