ฉันต้องการเรียกใช้โปรแกรมในสภาพแวดล้อมที่ว่างเปล่า (เช่นไม่มีการตั้งค่าสภาพแวดล้อม) วิธีการทำเช่นนี้ในทุบตี?
ฉันต้องการเรียกใช้โปรแกรมในสภาพแวดล้อมที่ว่างเปล่า (เช่นไม่มีการตั้งค่าสภาพแวดล้อม) วิธีการทำเช่นนี้ในทุบตี?
คำตอบ:
คุณสามารถทำได้ด้วยenv
:
env -i your_command
ตรงกันข้ามกับความคิดเห็นด้านล่างสิ่งนี้จะทำให้สภาพแวดล้อมชัดเจน แต่ก็ไม่ได้ป้องกันyour_command
การตั้งค่าตัวแปรใหม่ โดยเฉพาะการใช้งานเชลล์จะทำให้การ/etc/profile
รันและเชลล์อาจมีการตั้งค่าบางอย่างในตัว
คุณสามารถตรวจสอบกับ:
env -i env
เช่นเช็ดสภาพแวดล้อมแล้วพิมพ์ ผลลัพธ์จะว่างเปล่า
echo 'echo $PATH' > test.sh && chmod u+x test.sh && env -i test.sh
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
PATH
, PWD
และSHLVL
มีการตั้งค่าโดยอัตโนมัติโดยการทุบตี +1
env -i bash --norc -c "declare -p PATH"
declare -- PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
หมายเหตุ "-x" สำหรับการส่งออก (และเป็นส่วนหนึ่งของสภาพแวดล้อม) หากคุณส่งออกด้วยตัวคุณเอง: env -i bash --norc -c "export PATH; declare -p PATH"
ให้declare -x PATH="/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:."
bash
อาจมีสภาพแวดล้อม"สะอาด"
$ env -i bash --noprofile --norc
env -i
คำสั่งรันคำสั่งที่กำหนดให้ไว้ในบรรทัดคำสั่งโดยไม่มีการโอนใด ๆ ของตัวแปรสภาพแวดล้อมของการส่งออกของสภาพแวดล้อมเปลือกเก่ากับสภาพแวดล้อมของโปรแกรมดำเนินการที่
--noprofile
ตัวเลือกหยุดbash
จากการอ่านสคริปต์เริ่มต้นทั้งระบบหรือเปลือกส่วนบุคคลที่มิฉะนั้นจะอ่านสำหรับเปลือกเข้าสู่ระบบ
--norc
ตัวเลือกหยุดbash
จากการอ่านสคริปต์เริ่มต้นเปลือกส่วนบุคคลที่มิฉะนั้นจะอ่านสำหรับเปลือกโต้ตอบ
env -i
? คุณใช้ระบบอะไร
env
เพื่อทำความสะอาดสภาพแวดล้อมของฉันและ--noprofile
เพื่อหลีกเลี่ยงการจัดหา / etc / โปรไฟล์และเพื่อน ๆ และ--norc
เพื่อหลีกเลี่ยงการจัดหา ~ / .bashrc และเพื่อน ๆ
env -i somecommand
รันคำสั่งในสภาพแวดล้อมที่ว่างเปล่าเป็นams ได้กล่าวแล้ว
โปรแกรมจำนวนมากอาศัยตัวแปรสภาพแวดล้อมที่สำคัญบางอย่างดังนั้นคุณอาจต้องการเก็บรักษาไว้:
env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand
หรือมิฉะนั้นคุณสามารถเข้าสู่ระบบในสภาพแวดล้อมที่เล็กเวลาเข้าสู่ระบบ
ssh localhost somecommand
env
ไม่สนับสนุน--
การปักปันเขตและการทำความพยายามที่จะเรียกใช้คำสั่งที่มีชื่อว่าenv -i FOO=bar -- env
--
env -i -- FOO=bar env
จริง ๆ แล้วควรจะเป็น ความผิดฉันเอง. ไม่ว่าจะเป็นประโยชน์ตั้งแต่สิ่งต่อไปนี้มันไม่ได้เริ่มต้นด้วย--
-
ในขณะที่คำตอบที่ยอมรับนั้นถูกต้องสิ่งที่คุณต้องการทำคือ:
env -i bash -l -c "printenv; and any other commands"
สิ่งนี้จะช่วยให้คุณสามารถทุบตีได้ แต่ใช้งานได้ (เหมือนกับเมื่อคุณลงชื่อเข้าใช้ในโหมดที่ไม่ต้องมีการโต้ตอบ) ตัวอย่างนี้ใช้กำหนดภาษาเขตเวลาบ้านและอื่น ๆ
env -i
เคลียร์HOME
ซึ่งหมายความว่าbash -l
หาของคุณไม่เจอ.bash_profile
ถ้าคุณต้องการเชลล์ที่เหมือนกับสิ่งที่คุณจะได้รับเมื่อเข้าสู่ระบบใหม่คุณต้องมีการตั้งค่าทางอ้อมเพิ่มเติมHOME
ก่อน
ปัญหาเกี่ยวกับคำตอบส่วนใหญ่ที่นี่คือenv -i
เคลียร์HOME
ดังนั้นแม้ว่าคุณจะเรียกใช้bash -l
ภายในก็จะไม่อ่าน.bash_profile
ฯลฯของคุณหากสิ่งที่คุณกำลังมองหาคือเปลือกที่ทำหน้าที่ราวกับว่าคุณเพิ่งเข้าสู่ระบบใหม่คุณ ต้องการสิ่งนี้แทน:
env -i HOME="$HOME" bash -l -c 'your_command'
ตัวอย่าง:
$ 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
เปลือกจะทำงานหรือ.bash_login
.bash_profile
ในการรับสภาพแวดล้อมที่สะอาดให้ใช้--noprofile
หรือตั้งค่าHOME
เป็นไดเรกทอรีที่ไม่มีไฟล์เหล่านั้น ฉันคิดว่ามันขึ้นอยู่กับสิ่งที่คุณหมายถึงโดย "สะอาด"
env -i bash -c ...
ใช่ถ้าคุณต้องการเปลือกตัวอักษรอะไรในนั้นเพียงทำตามคำตอบเดิมและทำ คำตอบนี้เฉพาะเมื่อคุณต้องการเชลล์ที่ดูเหมือนว่าคุณเพิ่งทำการล็อกอินใหม่บนเครื่อง
หากต้องการตอบความคิดเห็นของ balki (และตอบคำถามของฉันเองในกระบวนการ :-):
% 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
ฉันจะได้รับ:/usr/bin/env: unrecognized option '--ignore-environment SOMETHING_TO_KEEP="$USER" PATH="$PATH" /bin/sh' Try '/usr/bin/env --help' for more information.