Env var này có nghĩa là gì? Mùi _ = / usr / bin / kdeinit


0
cshell> env 
...
_=/usr/bin/kdeinit

Tôi nghi ngờ biến này làm chậm khởi động vim. Bây giờ tôi phải khởi chạy 'vim -X', nếu không thì phải mất 6 giây để bắt đầu vim.

Tôi không thể google nó, vì hầu hết các câu trả lời liên quan đến "env var undererscore 'giải thích" $ _ ", đó không phải là điều tôi muốn.


1
Nhưng $_ cách bạn muốn truy cập vào nó ...?
Daniel B

1
$ _ là biến đặc biệt lưu trữ lệnh cuối cùng, có phải là _trongenv
Yao Jin

Vâng, đó là điều tương tự. Giống như cách bạn sử dụng $ PATH để truy cập biến môi trường PATH. Tôi không biết tại sao vỏ có xu hướng xuất $ _ ra môi trường, nhưng chúng thì có. Vì vậy, khi shellscript '/ usr / bin / kdeinit' chạy, nó đã xuất nó.
grawity

@YaoJin: Đây thực sự là tham số cuối cùng của lệnh cuối cùng. Ví dụ: điều này sẽ lặp lại "ba":true one two three; echo $_
Heptite

Cảm ơn tất cả. Tôi hiểu nó bây giờ. Đây là lệnh cuối cùng sau khi shell bắt đầu;
Yao Jin

Câu trả lời:


1

Câu trả lời dễ dàng với csh

Nếu bạn chỉ lo lắng về C Shell, điều đó thật dễ dàng. Đây là dòng lệnh của lệnh cuối cùng được thực thi. Xem Thay thế biến trong tài liệu tcsh

Câu trả lời dễ dàng với bash

Trong Bash, tài liệu trong chương Thông số đặc biệt cho chúng ta biết như sau:

Khi khởi động shell, được đặt thành tên đường dẫn tuyệt đối được sử dụng để gọi tập lệnh shell hoặc shell đang được thực thi như được truyền trong môi trường hoặc danh sách đối số. Sau đó, mở rộng đến đối số cuối cùng cho lệnh trước đó, sau khi mở rộng. Cũng được đặt thành tên đường dẫn đầy đủ được sử dụng để gọi từng lệnh được thực thi và được đặt trong môi trường được xuất sang lệnh đó. Khi kiểm tra thư, tham số này giữ tên của tệp thư.

Vì vậy, trong bash , nó thường là đối số cuối cùng cho lệnh trước đó. Thông thường...

Câu trả lời phức tạp với cả bashcsh

Trong trường hợp của bạn, phần mềm kdeinit được gọi từ shell Bash. Trước khi thực hiện kdeinit , tên đường dẫn đầy đủ của lệnh ( / usr / bin / kdeinit ) đã được sao chép bằng bash trong biến môi trường gạch dưới theo giải thích bên dưới. Phần mềm kdeinit đã khởi tạo môi trường đồ họa của bạn, truyền biến biến môi trường này cho mọi tiến trình con. Thiết bị đầu cuối C Shell của bạn do đó thừa hưởng biến môi trường đó.

Khi bạn ở trong C Shell đó, sự nhầm lẫn nằm giữa biến shell $ _ và biến môi trường _ . Trong C Shell, khi bạn sử dụng cấu trúc $ name , nó xuất ra biến shell hoặc biến môi trường nếu biến shell không tồn tại. Trong trường hợp này, cả hai đều tồn tại và khác nhau. Biến môi trường (như được hiển thị bởi lệnh env ) sẽ luôn nhắc cùng giá trị / usr / bin / kdeinit trong khi biến shell sẽ tiếp tục thay đổi để hiển thị lệnh cuối cùng được thực thi.


1
Đối với vấn đề của bạn với vim, nếu bạn muốn kiểm tra chạy vim mà không có biến môi trường đó, hãy thực hiện lệnh sau: env -u _
user210584
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.