Câu trả lời:
Bạn có thể làm điều này với env
:
env -i your_command
Trái ngược với những ý kiến dưới đây, điều này không hoàn toàn rõ ràng ra môi trường, nhưng nó không ngăn chặn your_command
thiết lập các biến mới. Cụ thể, chạy shell sẽ khiến /etc/profile
cho chạy và shell cũng có thể có một số cài đặt tích hợp.
Bạn có thể kiểm tra điều này với:
env -i env
tức là lau môi trường và sau đó in nó. Đầu ra sẽ trống.
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
bản in /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
.
PATH
, PWD
và SHLVL
được thiết lập tự động bằng Bash. +1.
env -i bash --norc -c "declare -p PATH"
cho declare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
. Lưu ý "-x" cho xuất khẩu (và do đó là một phần của môi trường) nếu bạn tự xuất nó: env -i bash --norc -c "export PATH; declare -p PATH"
chodeclare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
Một bash
môi trường "sạch" có thể có
$ env -i bash --noprofile --norc
Các env -i
lệnh thực thi lệnh cho nó trên dòng lệnh mà không chuyển bất kỳ của các biến môi trường xuất khẩu của môi trường vỏ cũ sang môi trường của chương trình thực thi.
Các --noprofile
tùy chọn dừng lại bash
từ việc đọc kịch bản trên toàn hệ thống hoặc khởi tạo vỏ cá nhân mà nếu không sẽ được đọc trong một vỏ đăng nhập.
Các --norc
tùy chọn dừng lại bash
từ việc đọc các kịch bản khởi tạo vỏ cá nhân mà nếu không sẽ được đọc cho một vỏ tương tác.
env -i
? Bạn đang trên hệ thống nào?
env
để làm sạch môi trường của tôi và --noprofile
để tránh tìm nguồn cung ứng / etc / profile và bạn bè, và --norc
để tránh tìm nguồn cung ứng ~ / .bashrc và bạn bè.
env -i somecommand
chạy một lệnh trong một môi trường trống, như ams đã đề cập .
Rất nhiều chương trình dựa trên một số biến môi trường quan trọng, vì vậy bạn có thể muốn giữ lại chúng:
env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand
Ngoài ra, bạn có thể đăng nhập vào một môi trường thời gian đăng nhập nhỏ.
ssh localhost somecommand
env
không hỗ trợ --
phân định và env -i FOO=bar -- env
cố gắng chạy một lệnh có tên --
.
env -i -- FOO=bar env
, thực sự. Lỗi của tôi. Không phải --
là hữu ích vì những gì tiếp theo nó không bắt đầu với -
.
Trong khi câu trả lời được chấp nhận là chính xác, điều bạn thường muốn làm là:
env -i bash -l -c "printenv; and any other commands"
Điều này cung cấp cho bạn bash trần nhưng chức năng (giống như bạn nhận được khi đăng nhập ở chế độ không tương tác). Ví dụ này đặt ngôn ngữ, múi giờ, TRANG CHỦ, v.v.
env -i
xóa HOME
, có nghĩa là bash -l
không thể tìm thấy của bạn, .bash_profile
v.v. Nếu bạn muốn có một cái vỏ giống như những gì bạn nhận được khi đăng nhập mới, bạn cần thêm một hướng dẫn để đặt HOME
trước.
Vấn đề với hầu hết các câu trả lời ở đây là rõ env -i
ràng HOME
, vì vậy ngay cả khi bạn chạy bash -l
vào bên trong, nó sẽ không đọc của bạn, .bash_profile
v.v ... Nếu thứ bạn đang tìm kiếm là một cái vỏ hoạt động như thể bạn vừa đăng nhập mới, bạn Thay vào đó, tôi muốn điều này:
env -i HOME="$HOME" bash -l -c 'your_command'
Thí dụ:
$ export ABC=123
$ env -i HOME="$HOME" bash -l -c 'env' | grep ABC
$ env HOME="$HOME" bash -l -c 'env' | grep ABC
ABC=123
bash
vỏ đăng nhập sẽ chạy .bash_login
hoặc .bash_profile
. Để có được một môi trường sạch, hãy sử dụng --noprofile
hoặc đặt HOME
thành một thư mục không có các tệp đó. Tôi cho rằng nó phụ thuộc vào ý của bạn là "sạch".
env -i bash -c ...
. Câu trả lời này là cụ thể khi bạn muốn có một vỏ trông giống như bạn vừa đăng nhập mới trên máy.
Để trả lời bình luận của balki (và trả lời câu hỏi của riêng tôi trong quá trình :-):
% echo Environment in calling shell: vars: $(env |wc -l); echo; ./du; echo; cat du
Environment in calling shell: vars: 43
==> This is the environment: vars: 5
PATH="$PATH"
PWD=/Users/nick
SHLVL=1
SOMETHING_TO_KEEP="$USER"
_=/usr/bin/env
==> The end.
#!/usr/bin/env -i SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh
echo "==> This is the environment: vars:" $(/usr/bin/env | /usr/bin/wc -l)
/usr/bin/env
echo "==> The end."
/usr/bin/env: invalid option -- ' ' Try '/usr/bin/env --help' for more information.
--ignore-environment
thì tôi nhận được điều này:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.