আমি একটি শূন্য পরিবেশে (যেমন কোনও এনভরিবেবল সেট না করে) একটি প্রোগ্রাম চালাতে চাই। বাশে এটি কীভাবে করবেন?
আমি একটি শূন্য পরিবেশে (যেমন কোনও এনভরিবেবল সেট না করে) একটি প্রোগ্রাম চালাতে চাই। বাশে এটি কীভাবে করবেন?
উত্তর:
আপনি এটি দিয়ে এটি করতে পারেন 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সোর্সিং / ইত্যাদি / প্রোফাইল এবং বন্ধুদের --norcএড়াতে এবং sour / .bashrc এবং বন্ধুরা স্রোসিং এড়ানোর জন্য।
env -i somecommandখালি পরিবেশে কমান্ড চালায়, যেমনটি এমএমএস ইতিমধ্যে উল্লেখ করেছে ।
প্রচুর প্রোগ্রাম কিছু গুরুত্বপূর্ণ পরিবেশের ভেরিয়েবলের উপর নির্ভর করে, তাই আপনি এগুলি বজায় রাখতে চাইতে পারেন:
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ভিতরের দিকে ছুটেন তবে এটি আপনার পড়বে না won't .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 ...। এই উত্তরটি বিশেষত যখন আপনি এমন শেল চান যা দেখে মনে হয় আপনি মেশিনে সদ্য একটি নতুন লগইন করেছেন।
বাল্কির মন্তব্যের উত্তর দিতে (এবং প্রক্রিয়াটিতে আমার নিজের প্রশ্নের উত্তর দেওয়া :-):
% 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.