Làm cách nào để xóa biến môi trường xuất?


1558

Trước khi cài đặt gnuplot, tôi đặt biến môi trường GNUPLOT_DRIVER_DIR = /home/gnuplot/build/src. Trong quá trình cài đặt, đã xảy ra lỗi.

Tôi muốn loại bỏ các GNUPLOT_DRIVER_DIRbiến môi trường. Làm thế nào tôi có thể đạt được nó?


2
Đối với những người đang tìm cách làm điều này trong Vỏ cá, hãy xem stackoverflow.com/questions/30703860/ (mặc dù câu hỏi này không dành cho một vỏ cụ thể)
Elijah Lynn

Câu trả lời:


2467

unset là lệnh bạn đang tìm kiếm.

unset GNUPLOT_DRIVER_DIR

5
Nhưng điều này chỉ hoạt động cho một phiên, còn việc không chắc chắn thì sao? hoặc có thể tìm kiếm bộ biến ở đâu, vì vậy bạn có thể đi và xóa nó?
eLRuLL

31
Điều này sẽ làm việc trên mỗi thiết bị đầu cuối. Nói chung, mỗi khi cửa sổ đầu cuối được mở, nó sẽ tải lên các biến từ nhiều nơi khác nhau, chẳng hạn như ~ / .bashrc, ~ / .profile, v.v. Bất kỳ biến nào bạn đặt trong một phiên bản đầu cuối sẽ không chuyển sang một phiên bản khác. Nếu bạn có một biến dường như được đặt tự động mỗi khi bạn mở terminal, hãy thử xem qua các tệp ẩn khác nhau trong thư mục chính của bạn cho nó. Hoặc, để xem nơi nó đang được đặt, hãy thử "grep -r <X> ~" trong đó <X> là tên của biến. Điều này có thể mất một lúc nếu bạn có nhiều tệp trong thư mục chính của bạn.
matt5784

1
Điều này loại bỏ các biến từ vỏ quá mặc dù. Là cách duy nhất unexportđể làm T="$MYVAR"; unset MYVAR; MYVAR="$T"; unset T?
olejorgenb

1
@olejorgenb Ít nhất là trong bash, bạn có thể nói declare +x MYVARđể xóa xuất nhưng giữ giá trị trong trình bao hiện tại.
Peder Klingenberg

4
@PederKlingenberg cũng export -n MYWARhoạt động tốt trong Bash.
jarno

170

Hướng dẫn tạo và xóa một biến môi trường trong bash:

Kiểm tra nếu biến DUALCASE tồn tại:

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

Nó không, vì vậy hãy tạo biến và xuất nó:

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

Kiểm tra nếu nó ở đó:

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

Nó ở đó. Vì vậy, hãy thoát khỏi nó:

el@apollo:~$ unset DUALCASE

Kiểm tra xem nó có còn ở đó không:

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

Biến môi trường xuất DUALCASE bị xóa.

Các lệnh bổ sung để giúp xóa các biến cục bộ và môi trường của bạn:

Bỏ đặt tất cả các biến cục bộ trở về mặc định khi đăng nhập:

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 lệnh xóa tất cả các biến cục bộ nhưng không phải biến môi trường.

Bỏ đặt tất cả các biến môi trường trở về mặc định khi đăng nhập:

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 lệnh xóa tất cả các biến môi trường để mặc định khi đăng nhập.


10
có lẽ echo $VARIABLEtốt hơn env | grep VARIABLE, nó nhẹ hơn vì nó không cần in tất cả các biến và sau đó gửi đầu ra của nó sang một quá trình (grep) khác. Thêm vào đó, env | VARIABLEcó thể bắt được nhiều hơn một biến khớp với cùng một mẫu. Plus2, echo $VARIABLEcó thể hoàn thành tên của biến bằng cách nhấn <Tab> (nếu nó tồn tại, đó cũng có thể là một gợi ý cho những gì bạn muốn làm).
Rodrigo Gurgel

10
'env | grep VARIABLE 'tốt hơn' echo $ VARIABLE 'bởi vì tôi có thể nói rằng nó thực sự đã biến mất
calasyr

8
@RodrigoGurgel, echo $VARIABLEkhông cho bạn biết liệu VARIABLE là biến shell (ở đây được gọi là "biến cục bộ") hay biến môi trường, là toàn bộ điểm của hướng dẫn.
hmijail thương tiếc người từ chức

4
Lưu ý rằng env -i bashdường như đang tạo một lớp con (ít nhất là trên máy Mac) có thể gây ra hậu quả không lường trước được.
Mark Chackerian

2
@RodrigoGurgel sử dụng echo sẽ không hiển thị biến hiện có được đặt thành chuỗi rỗng hoặc nul. tuy nhiên, theo quan điểm của bạn, một cách thích hợp để kiểm tra biến sẽ là env | grep -e '^VARNAME='.
Thomas

5

Bởi vì câu hỏi ban đầu không đề cập đến cách biến được đặt và vì tôi đã vào trang này để tìm câu trả lời cụ thể này, nên tôi thêm vào như sau:

Trong C shell (csh / tcsh) có hai cách để đặt biến môi trường:

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

Sự khác biệt trong hành vi là các biến được thiết lập bằng lệnh setenv sẽ tự động được xuất sang subshell trong khi biến được đặt với set không.

Để bỏ đặt một bộ biến với bộ , sử dụng

unset x

Để bỏ đặt một bộ biến với setenv , hãy sử dụng

unsetenv x

Lưu ý: trong tất cả các mục trên, tôi giả sử rằng tên biến là 'x'.

tín dụng:

https://www.cyberciti.biz/faq/unix-linux-difference-b between-set-and-setenv-c-shell-variable / https://www.oreilly.com/l Library / view / solaristm-7- tham khảo / 0130200484/0130200484_ch18lev1sec24.html


Bổ sung tuyệt vời về sự khác biệt giữa các subshells set / setenv!
4levels

4

điều này cũng có thể làm việc

export GNUPLOT_DRIVER_DIR=

10
Biến vẫn tồn tại, nhưng nó chứa một chuỗi rỗng, như bạn có thể thấy trong đầu ra của envlệnh. Nó chỉ có thể là trường hợp ứng dụng sử dụng biến không phân biệt giữa biến môi trường không tồn tại và biến môi trường trống.
Palec

1
vâng, nó sẽ chứa, đây chỉ là để loại bỏ giá trị chứ không phải loại bỏ biến. Nhưng có, người ta có thể sử dụng - bỏ đặt GNUPLOT_DRIVER_DIR.
Nilesh K.

Điều này không hoạt động trong trường hợp biến PAGER. Tôi đã cố gắng hủy cài đặt PAGER của mình export PAGER=, nhưng điều đó chỉ vô hiệu hóa phân trang hoàn toàn - tất cả các trang người đàn ông của tôi chỉ đổ thẳng vào thiết bị đầu cuối. unset PAGERđã lừa, hoàn nguyên nó thành hành vi mặc định.
Chad

1

Như đã đề cập trong các câu trả lời ở trên, unset GNUPLOT_DRIVER_DIRsẽ hoạt động nếu bạn đã sử dụng exportđể đặt biến. Nếu bạn đã đặt nó vĩnh viễn ~/.bashrchoặc ~/.zshrcsau đó chỉ cần gỡ bỏ nó khỏi đó sẽ hoạt động.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.