`setx` tương đương trong Ubuntu


9

Windows có một lệnh powershell được gọi là setxTạo hoặc sửa đổi các biến môi trường trong môi trường người dùng hoặc hệ thống.

Ubuntu có một lệnh tương tự, tức là không bằng cách sử dụng nanohoặc vi, chỉ một dòng để thêm hoặc cập nhật một hệ thống biến môi trường rộng.

Giải pháp đã thực hiện

Một dòng để thêm / cập nhật

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

Câu trả lời:


12

Bạn có thể làm điều này đơn giản bằng cách khai báo nó là mới trong dòng lệnh hoặc khai báo lại. Ví dụ: nếu bạn muốn thêm ~/testfoldervào biến đường dẫn của mình, bạn chỉ cần nhập nó vào thiết bị đầu cuối hiện tại của mình (đây chỉ là một ví dụ):

PATH="$HOME/testfolder:$PATH"

Điều này tất nhiên sẽ chỉ thay đổi nó trong thời gian bạn đã nói phiên cuối mở. Lưu ý $cách sử dụng ở đây, bạn để nó ra để khai báo, nhưng nếu bạn muốn hiển thị nó, bạn cần thêm $để mở rộng nội dung của nó.

Nếu bạn muốn khai báo chúng lâu hơn và chung chung, bạn có thể thêm chúng vào tệp ~/.bashrc(chỉ dành cho bạn) hoặc trong /etc/bash.bashrc(toàn hệ thống) nếu bạn muốn chúng chỉ tính cho bạn hoặc cho tất cả người dùng. Một tùy chọn khác là thêm nó vào .profiletệp của bạn (chỉ dành cho chính bạn), nơi nó sẽ khả thi kể từ thời điểm bạn đăng nhập. Bạn có thể làm điều này với echoví dụ nếu bạn chắc chắn biến này chưa được đặt hoặc nếu bạn tạo mới. (chỉ một ví dụ):

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

Tuy nhiên, nếu bạn muốn chỉnh sửa một tệp bên ngoài thư mục người dùng của bạn, đó là trường hợp khi bạn muốn chỉnh sửa, /etc/bash.bashrcbạn cần sử dụng sudovà vì vậy bạn không thể sử dụng một 'tài liệu ở đây' vì điều này sẽ không hoạt động, thay vào đó hãy sử dụng một dòng như dưới đây:

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

Tuy nhiên, nếu biến đã tồn tại, bạn có thể thay đổi nó bằng sedlệnh (cũng chỉ là một ví dụ):

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

Điều này sẽ chỉnh sửa biến trong tệp nhưng tạo bản sao lưu của nó trước khi chỉnh sửa. Nếu bạn thay đổi các tập tin bên ngoài thư mục người dùng của bạn bằng sed, bạn cần sử dụng sudotrong hầu hết các trường hợp, vì vậy dòng sẽ là:

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

Việc xóa một biến khỏi một tệp cũng có thể được thực hiện sed, chỉ cần để trống phần thứ hai của biểu thức chính:

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

Nếu bạn quan tâm đến biến môi trường nào được đặt, bạn có thể sử dụng envlệnh để liệt kê chúng ( set -o posix ; set ) | lesshoặc sh -c set. Tất cả ba cung cấp số lượng đầu ra khác nhau, với ( set -o posix ; set ) | lessviệc trả lại hầu hết các biến được đặt thực sự.


1
Thay vì ( set -o posix ; set )nói đơn giản hơn sh -c set. Điều này sẽ hoạt động ngay cả khi shlà một liên kết tượng trưng bash(không thường thấy trên các phiên bản Ubuntu hiện đại).
Ruslan

@ruslan sh -c setkhông hiển thị thực sự tất cả các biến môi trường được đặt trên hệ thống. Tuy nhiên tôi sẽ bao gồm nó như một cách thứ ba để hiển thị một số trong số họ.
Videonauth

Thực tế sh -c setcho thấy tất cả các biến môi trường . Nó chỉ không hiển thị các biến shell của shell gọi, nhưng chúng không bao giờ được kế thừa bởi một quá trình bạn chạy từ shell đó, trừ khi bạn là exportchúng.
Ruslan

bao giờ một lý do hợp lệ để chỉnh sửa /etc/environment? Có vẻ như đó là một lối tắt cho sự nhầm lẫn.
Roger Lipscombe

@RogerLipscombe Cảm ơn bạn, không chắc chắn về điều đó, nó vẫn là một nơi khả thi để chỉnh sửa các biến, nhưng tôi đã lấy nó ra để không gây nhầm lẫn.
Videonauth

11

Không có tương đương trực tiếp setx /m, nhưng có nhiều cách để hoàn thành những gì setx /m.

setx /mđặt variable=valuevào HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment. Non- / m (tức là mỗi người dùng) setxchỉ cần đặt variable=valuevào HKCU\Environment.

Bạn đặc biệt yêu cầu "hệ thống rộng". Vì thế, bạn sẽ thêm cặp giá trị biến vào /etc/environmentHOẶC /etc/profile.d/<yourfile>. Cái trước được đánh giá bởi pam, trong khi cái sau được đánh giá bởi /bin/sh. Vì vậy, trong /etc/profile.d/<yourfile>, bạn sẽ thêm variable=value; export variable. (bash cũng cho phép export variable=value). Đối với /etc/environmentbạn sẽ thêm variable=value.

Tương đương trên mỗi người dùng là ~/.pam_environment~/.profile.

Xem thêm: https://help.ubfox.com/community/En MôiVariables


7

Bạn có thể xuất các biến môi trường trên dòng lệnh, nhưng nó sẽ không ảnh hưởng đến môi trường hiệu quả trong các quy trình đã bắt đầu, chỉ trong quy trình hiện tại và các quy trình con của nó. Vì vậy, trong thực tế, bạn thường cần phải đăng nhập lại khi thay đổi các biến môi trườ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.