`setx` เทียบเท่าใน Ubuntu


10

Windows มีคำสั่ง powershell setxซึ่งเรียกว่าสร้างหรือแก้ไขตัวแปรสภาพแวดล้อมในผู้ใช้หรือสภาพแวดล้อมระบบ

Ubuntu มีคำสั่งที่คล้ายกันหรือไม่โดยใช้nanoหรือviเพียงหนึ่งบรรทัดเพื่อเพิ่มหรืออัปเดตระบบตัวแปรสภาพแวดล้อมที่กว้าง

โซลูชันที่ดำเนินการ

หนึ่งบรรทัดเพื่อเพิ่ม / อัปเดต

grep env_name /etc/environment && sed -i.bak 's/env_name=.*/env_name="env_value"/' /etc/environment || echo 'env_name="env_value"' >> /etc/environment

คำตอบ:


12

คุณสามารถทำได้ง่ายๆโดยการประกาศว่าเป็นสิ่งใหม่ในบรรทัดคำสั่งหรือประกาศใหม่ ตัวอย่างเช่นหากคุณต้องการเพิ่ม~/testfolderให้กับตัวแปรพา ธ ของคุณคุณสามารถป้อนลงในเทอร์มินัลปัจจุบันของคุณ (นี่เป็นเพียงตัวอย่าง):

PATH="$HOME/testfolder:$PATH"

แน่นอนว่าสิ่งนี้จะเปลี่ยนแปลงได้เฉพาะเมื่อคุณเปิดเซสชันเทอร์มินัล สังเกตการ$ใช้งานที่นี่คุณปล่อยให้มันประกาศ แต่ถ้าคุณต้องการแสดงคุณต้องเพิ่ม$เพื่อขยายเนื้อหา

หากคุณต้องการประกาศให้ยาวนานขึ้นและทั่วไปคุณสามารถเพิ่มพวกเขาลงในไฟล์~/.bashrc(สำหรับคุณเท่านั้น) หรือใน/etc/bash.bashrc(ทั้งระบบ) ตัวอย่างเช่นหากคุณต้องการให้พวกเขานับเฉพาะคุณหรือผู้ใช้ทั้งหมด อีกตัวเลือกหนึ่งคือการเพิ่มลงใน.profileไฟล์ของคุณ(สำหรับตัวคุณเองเท่านั้น) ซึ่งจะสามารถใช้งานได้ทันทีที่คุณเข้าสู่ระบบคุณสามารถทำได้echoเช่นถ้าคุณแน่ใจว่าตัวแปรนี้ยังไม่ได้ตั้งค่าหรือถ้าคุณสร้างใหม่ (ตัวอย่างเท่านั้น):

echo "variable=value" >> /path/filename

หากคุณต้องการแก้ไขไฟล์นอกไดเรกทอรีผู้ใช้ของคุณซึ่งเป็นกรณีที่คุณต้องการแก้ไข/etc/bash.bashrcคุณต้องใช้sudoและคุณไม่สามารถใช้ 'เอกสารที่นี่' เพราะมันใช้งานไม่ได้ให้ใช้แทนบรรทัดดังต่อไปนี้:

echo "variable=value" | sudo tee -a /path/filename

หากตัวแปรมีอยู่แล้วคุณสามารถเปลี่ยนได้ด้วยsedคำสั่ง (เช่นตัวอย่าง):

sed -i.bak 's/variable=value/variable=new-value/' /path/filename

สิ่งนี้จะแก้ไขตัวแปรในไฟล์ แต่สร้างการสำรองข้อมูลของมันก่อนการแก้ไข หากคุณเปลี่ยนไฟล์นอกไดเรกทอรีผู้ใช้ของคุณด้วย sed คุณต้องใช้sudoในกรณีส่วนใหญ่ดังนั้นบรรทัดจะเป็น:

sudo sed -i.bak 's/variable=value/variable=new-value/' /path/filename

การลบตัวแปรออกจากไฟล์สามารถทำได้ด้วยsedเช่นกันเพียงแค่ปล่อยให้ส่วนที่สองของ regex ว่างเปล่า:

sed -i.bak 's/variable=value//' /path/filename

หากสนใจซึ่งตัวแปรสภาพแวดล้อมของคุณจะตั้งคุณสามารถใช้envคำสั่งไปยังรายการที่พวกเขาหรือ( set -o posix ; set ) | less sh -c setทั้งสามให้จำนวนผลลัพธ์ที่แตกต่างกันด้วย( set -o posix ; set ) | lessการคืนค่าตัวแปรส่วนใหญ่ที่ตั้งจริง


1
แทนที่จะมันง่ายที่จะพูด( set -o posix ; set ) sh -c setสิ่งนี้จะใช้งานได้แม้ว่าshจะเป็น symlink ไปbash(ซึ่งไม่ปกติใน Ubuntu รุ่นใหม่)
Ruslan

@ruslan sh -c setไม่แสดงตัวแปรสภาพแวดล้อมจริง ๆ ทั้งหมดที่ตั้งอยู่บนระบบ อย่างไรก็ตามฉันจะรวมมันเป็นวิธีที่สามในการแสดงบางอย่าง
Videonauth

sh -c setแสดงตัวแปรสภาพแวดล้อมจริงทั้งหมด มันก็ไม่ได้แสดง เปลือกตัวแปรของเปลือกเรียก แต่เหล่านี้จะไม่ได้รับการถ่ายทอดโดยกระบวนการที่คุณเรียกใช้จากกะลาว่าถ้าคุณexportให้พวกเขา
Ruslan

มีเคยเป็นเหตุผลที่ถูกต้องในการแก้ไข/etc/environment? ดูเหมือนว่าเป็นทางลัดไปสู่ความสับสน
Roger Lipscombe

@RogerLipscombe ขอบคุณคุณยังไม่แน่ใจเกี่ยวกับเรื่องนี้มันยังคงเป็นสถานที่ที่ทำงานได้ดีในการแก้ไขตัวแปร แต่ฉันเอามันออกมาเพราะไม่ก่อให้เกิดความสับสน
Videonauth

11

ไม่มีสิ่งที่เทียบเท่าโดยตรงsetx /mแต่มีวิธีที่จะทำให้สำเร็จในสิ่งที่setx /mทำ

setx /mทำให้ในvariable=value HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\EnvironmentNon-/ m (เช่นต่อผู้ใช้) setxเพียงแค่ทำให้ในvariable=valueHKCU\Environment

คุณถามถึง 'system wide' โดยเฉพาะ เพื่อที่คุณจะเพิ่มคู่ตัวแปรที่มีมูลค่าอย่างใดอย่างหนึ่งหรือ/etc/environment อดีตคือการประเมินโดยแพมในขณะที่หลังได้รับการประเมินโดย/etc/profile.d/<yourfile> /bin/shดังนั้นในการที่คุณจะเพิ่ม/etc/profile.d/<yourfile> variable=value; export variable(ทุบตียังช่วยให้export variable=value) สำหรับคุณจะเพิ่ม/etc/environmentvariable=value

เทียบเท่าต่อผู้ใช้เป็นและ~/.pam_environment~/.profile

ดูเพิ่มเติมที่: https://help.ubuntu.com/community/EnvironmentVariables


7

คุณสามารถส่งออกตัวแปรสภาพแวดล้อมในบรรทัดคำสั่ง แต่จะไม่ส่งผลกระทบต่อสภาพแวดล้อมที่มีประสิทธิภาพในกระบวนการที่เริ่มต้นแล้วเฉพาะในกระบวนการปัจจุบันและกระบวนการย่อย ดังนั้นในทางปฏิบัติบ่อยครั้งที่คุณต้อง relogin เมื่อมีการเปลี่ยนแปลงตัวแปรสภาพแวดล้อม

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