আমি একটি শূন্য পরিবেশে (যেমন কোনও এনভরিবেবল সেট না করে) একটি প্রোগ্রাম চালাতে চাই। বাশে এটি কীভাবে করবেন?
আমি একটি শূন্য পরিবেশে (যেমন কোনও এনভরিবেবল সেট না করে) একটি প্রোগ্রাম চালাতে চাই। বাশে এটি কীভাবে করবেন?
উত্তর:
আপনি এটি দিয়ে এটি করতে পারেন 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.