ฉันจะลบตัวแปรสภาพแวดล้อมที่ส่งออกได้อย่างไร


1558

ก่อนการติดตั้ง gnuplot GNUPLOT_DRIVER_DIR = /home/gnuplot/build/srcผมตั้งตัวแปรสภาพแวดล้อม ระหว่างการติดตั้งมีบางอย่างผิดปกติ

ฉันต้องการลบGNUPLOT_DRIVER_DIRตัวแปรสภาพแวดล้อม ฉันจะทำให้สำเร็จได้อย่างไร


2
สำหรับผู้ที่มองหาวิธีการทำเช่นนี้ใน Fish shell โปรดดูstackoverflow.com/questions/30703860// (แม้ว่าคำถามนี้ไม่ได้มีไว้สำหรับเชลล์เฉพาะ)
Elijah Lynn

คำตอบ:


2465

unset เป็นคำสั่งที่คุณกำลังมองหา

unset GNUPLOT_DRIVER_DIR

5
แต่วิธีนี้ใช้งานได้เฉพาะเซสชันเท่านั้น หรืออาจค้นหาว่าชุดตัวแปรอยู่ที่ไหนคุณสามารถไปและลบมันได้หรือไม่
eLRuLL

31
สิ่งนี้ควรทำงานต่ออินสแตนซ์เทอร์มินัล โดยทั่วไปทุกครั้งที่เปิดหน้าต่างเทอร์มินัลมันจะโหลดตัวแปรจากสถานที่ต่าง ๆ เช่น ~ / .bashrc, ~ / .profile ฯลฯ ตัวแปรใด ๆ ที่คุณตั้งค่าในอินสแตนซ์ของเทอร์มินัลหนึ่งจะไม่ดำเนินการต่อไป หากคุณมีตัวแปรที่ดูเหมือนว่าจะถูกตั้งค่าโดยอัตโนมัติทุกครั้งที่คุณเปิดเทอร์มินัลให้ลองค้นหาไฟล์ที่ซ่อนต่าง ๆ ในโฮมไดเร็กตอรี่ของมัน หรือหากต้องการดูตำแหน่งที่ตั้งให้ลอง "grep -r <X> ~" โดยที่ <X> เป็นชื่อของตัวแปร อาจใช้เวลาสักครู่หากคุณมีไฟล์จำนวนมากในโฮมไดเร็กตอรี่ของคุณ
matt5784

1
สิ่งนี้จะลบตัวแปรออกจากเชลล์ด้วย เป็นวิธีเดียวที่unexportจะทำT="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb

1
@olejorgenb อย่างน้อยใน bash คุณสามารถพูดdeclare +x MYVARเพื่อลบการส่งออก แต่เก็บค่าไว้ในเชลล์ปัจจุบัน
Peder Klingenberg

4
@PederKlingenberg export -n MYWARทำงานได้ดีใน Bash
jarno

170

คำแนะนำของการสร้างและการลบตัวแปรสภาพแวดล้อมใน bash:

ทดสอบว่ามีตัวแปร DUALCASE อยู่หรือไม่:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

มันไม่ได้ดังนั้นสร้างตัวแปรและส่งออกมัน:

el@apollo:~$ DUALCASE=1
el@apollo:~$ export DUALCASE

ตรวจสอบว่ามี:

el@apollo:~$ env | grep DUALCASE
DUALCASE=1

มันอยู่ที่นั่น. ดังนั้นกำจัดมัน:

el@apollo:~$ unset DUALCASE

ตรวจสอบว่ามันยังอยู่ที่นั่น:

el@apollo:~$ env | grep DUALCASE
el@apollo:~$ 

ตัวแปรสภาพแวดล้อม DUALCASE ที่ส่งออกจะถูกลบ

คำสั่งพิเศษเพื่อช่วยล้างตัวแปรโลคอลและสภาพแวดล้อมของคุณ:

ยกเลิกการตั้งค่าตัวแปรท้องถิ่นทั้งหมดกลับไปเป็นค่าเริ่มต้นเมื่อเข้าสู่ระบบ:

el@apollo:~$ CAN="chuck norris"
el@apollo:~$ set | grep CAN
CAN='chuck norris'
el@apollo:~$ env | grep CAN
el@apollo:~$
el@apollo:~$ exec bash
el@apollo:~$ set | grep CAN
el@apollo:~$ env | grep CAN
el@apollo:~$

exec bash คำสั่งล้างตัวแปรท้องถิ่นทั้งหมด แต่ไม่ใช่ตัวแปรสภาพแวดล้อม

ยกเลิกการตั้งค่าตัวแปรสภาพแวดล้อมทั้งหมดกลับเป็นค่าเริ่มต้นเมื่อเข้าสู่ระบบ:

el@apollo:~$ export DOGE="so wow"
el@apollo:~$ env | grep DOGE
DOGE=so wow
el@apollo:~$ env -i bash
el@apollo:~$ env | grep DOGE
el@apollo:~$

env -i bash คำสั่งล้างตัวแปรสภาพแวดล้อมทั้งหมดเพื่อเริ่มต้นในการเข้าสู่ระบบ


10
อาจecho $VARIABLEจะดีกว่าenv | grep VARIABLEมันเบากว่าเนื่องจากไม่จำเป็นต้องพิมพ์ตัวแปรทั้งหมดแล้วส่งผลลัพธ์ไปยังกระบวนการอื่น (grep) นอกจากนี้env | VARIABLEสามารถจับได้มากกว่าหนึ่งตัวแปรที่ตรงกับรูปแบบเดียวกัน บวก 2 echo $VARIABLEทำให้เป็นไปได้ที่จะเติมชื่อตัวแปรให้สมบูรณ์โดยการกดปุ่ม <Tab> (ถ้ามีอยู่นั่นอาจเป็นคำใบ้ว่าคุณต้องการทำอะไร)
Rodrigo Gurgel

10
'env | grep VARIABLE 'ดีกว่า' echo $ VARIABLE 'เพราะฉันบอกได้เลยว่ามันหายไปจริงๆ
calasyr

8
@RodrigoGurgel echo $VARIABLEไม่ได้บอกคุณว่าตัวแปรเป็นตัวแปรเชลล์ (ที่นี่เรียกว่า "ตัวแปรท้องถิ่น") หรือตัวแปรสภาพแวดล้อมซึ่งเป็นจุดสำคัญของคำแนะนำทั้งหมด
hmijail mourns ลาออก

4
โปรดทราบว่าenv -i bashดูเหมือนว่าจะสร้าง subshell (อย่างน้อยบน Mac) ซึ่งอาจมีผลกระทบที่ไม่ตั้งใจ
Mark Chackerian

2
@RodrigoGurgel โดยใช้ echo จะไม่แสดงชุดตัวแปรที่มีอยู่เป็นสตริงว่างหรือ nul env | grep -e '^VARNAME='ไปยังจุดของคุณแม้ว่าวิธีการที่เหมาะสมในการทดสอบตัวแปรจะเป็น
โทมัส

5

เนื่องจากคำถามเดิมไม่ได้กล่าวถึงวิธีการตั้งค่าตัวแปรและเนื่องจากฉันมาที่หน้านี้เพื่อค้นหาคำตอบเฉพาะนี้ฉันจึงเพิ่มสิ่งต่อไปนี้:

ใน C เชลล์ (csh / tcsh)มีสองวิธีในการตั้งค่าตัวแปรสภาพแวดล้อม:

  1. set x = "something"
  2. setenv x "something"

ความแตกต่างในพฤติกรรมคือตัวแปรที่ตั้งค่าด้วยคำสั่งsetenvจะถูกส่งออกไปยัง subshell โดยอัตโนมัติในขณะที่ชุดตัวแปรที่มีชุดไม่ใช่

หากต้องการยกเลิกการตั้งค่าชุดตัวแปรพร้อมชุดให้ใช้

unset x

หากต้องการยกเลิกการตั้งค่าชุดตัวแปรด้วยsetenvให้ใช้

unsetenv x

หมายเหตุ:ข้างต้นทั้งหมดฉันคิดว่าชื่อตัวแปรคือ 'x'

เครดิต:

https://www.cyberciti.biz/faq/unix-linux-difference-between-set-and-setenv-c-shell-variable/ https://www.oreilly.com/library/view/solaristm-7- อ้างอิง / 0130200484 / 0130200484_ch18lev1sec24.html


นอกจากนี้ที่ยอดเยี่ยมเกี่ยวกับความแตกต่างระหว่างชุดย่อย set / setenv wrt!
4 ระดับ

4

สิ่งนี้อาจใช้งานได้

export GNUPLOT_DRIVER_DIR=

10
ตัวแปรยังคงมีอยู่ แต่มีสตริงว่างตามที่คุณเห็นในผลลัพธ์ของenvคำสั่ง อาจเป็นกรณีที่แอปพลิเคชันที่ใช้ตัวแปรไม่แยกความแตกต่างระหว่างตัวแปรสภาพแวดล้อมที่ไม่มีอยู่และว่างเปล่า
Palec

1
ใช่มันจะมีนี่เป็นเพียงการลบค่าที่จะไม่ลบตัวแปร แต่ใช่หนึ่งสามารถใช้ - ยกเลิกการตั้งค่า GNUPLOT_DRIVER_DIR
Nilesh K.

สิ่งนี้ไม่ทำงานในกรณีของตัวแปร PAGER ฉันพยายามยกเลิกการตั้งค่า PAGER ของฉันด้วยexport PAGER=แต่นั่นเป็นการปิดใช้งานการเพจโดยสิ้นเชิง - หน้าเพจทั้งหมดของฉันจะถูกเทลงไปยังเทอร์มินัล unset PAGERทำเคล็ดลับแล้วเปลี่ยนกลับเป็นพฤติกรรมเริ่มต้น
ชาด

1

ดังที่กล่าวไว้ในคำตอบข้างต้นunset GNUPLOT_DRIVER_DIRควรทำงานถ้าคุณเคยexportตั้งค่าตัวแปร หากคุณตั้งค่าไว้อย่างถาวรใน~/.bashrcหรือ~/.zshrcเพียงแค่ลบออกจากที่นั่นจะทำงาน

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