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_commandthiết lập các biến mới. Cụ thể, chạy shell sẽ khiến /etc/profilecho 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.shbản in /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.
PATH, PWDvà 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 bashmôi trường "sạch" có thể có
$ env -i bash --noprofile --norc
Các env -ilệ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 --noprofiletùy chọn dừng lại bashtừ 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 --norctùy chọn dừng lại bashtừ 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 somecommandchạ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
envkhông hỗ trợ --phân định và env -i FOO=bar -- envcố 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 -ixóa HOME, có nghĩa là bash -lkhông thể tìm thấy của bạn, .bash_profilev.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 HOMEtrước.
Vấn đề với hầu hết các câu trả lời ở đây là rõ env -iràng HOME, vì vậy ngay cả khi bạn chạy bash -lvào bên trong, nó sẽ không đọc của bạn, .bash_profilev.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
bashvỏ đăng nhập sẽ chạy .bash_loginhoặc .bash_profile. Để có được một môi trường sạch, hãy sử dụng --noprofilehoặc đặt HOMEthà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-environmentthì 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.