বাশে কীভাবে একটি পরিষ্কার পরিবেশে একটি প্রোগ্রাম চালানো যায়?


113

আমি একটি শূন্য পরিবেশে (যেমন কোনও এনভরিবেবল সেট না করে) একটি প্রোগ্রাম চালাতে চাই। বাশে এটি কীভাবে করবেন?


1
সম্ভবত সম্পর্কিত: কীভাবে
কোনও কেএস

উত্তর:


127

আপনি এটি দিয়ে এটি করতে পারেন env:

env -i your_command

নীচের মন্তব্য পক্ষান্তরে এই করে পরিবেশ আউট সম্পূর্ণরূপে স্পষ্ট, কিন্তু এটা বাধা দেয় না your_commandনতুন ভেরিয়েবলের মান স্থাপনার। বিশেষত, একটি শেল /etc/profileচালানো চালনার কারণ হতে পারে, এবং শেলটি সেটিংসে কিছুটা অন্তর্নির্মিত থাকতে পারে।

আপনি এটি দিয়ে পরীক্ষা করতে পারেন:

env -i env

অর্থাত্ পরিবেশ মুছুন এবং তারপরে এটি মুদ্রণ করুন। আউটপুট ফাঁকা হবে।


4
এটি পরিবেশটি পুরোপুরি পরিষ্কার করে না: 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
l0b0

2
তবে মনে এই নিকটতম আপনি পেতে পারেন - এটা মত ভেরিয়েবল মত মনে হয় PATH, PWDএবং SHLVLব্যাশ দ্বারা স্বয়ংক্রিয়ভাবে সেট করা হয়। +1 টি।
l0b0

3
@ আই0 বি0: আমার সম্পাদনা দেখুন।
এএমএস

3
প্রথম মন্তব্যকারীর স্ক্রিপ্টে PATH ভেরিয়েবল পরিবেশে নেই এবং তাই পরিবেশ পরিবর্তনশীল নয়। স্পষ্টতই PATH নামে নিজস্ব নিয়মিত শেল ভেরিয়েবল সেট করে যদি এর জন্য কোনও রফতানি না হয়: 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:."
নিজেরাই

33

একটি "পরিষ্কার" bashপরিবেশ থাকতে পারে

$ env -i bash --noprofile --norc
  • env -iকমান্ড কমান্ড মৃত্যুদন্ড কার্যকর প্রোগ্রামের পরিবেশ পুরাতন শেল পরিবেশের রপ্তানি এনভায়রনমেন্ট ভেরিয়েবল এর কোনো হস্তান্তর ছাড়া কমান্ড লাইন তে এটি দেওয়া সঞ্চালন করে।

  • --noprofileবিকল্প স্টপ bashসিস্টেম-ব্যাপী বা ব্যক্তিগত শেল আরম্ভের স্ক্রিপ্ট অন্যথায় একটি লগইন শেল জন্য পড়া হবে পড়া থেকে।

  • --norcবিকল্প স্টপ bashব্যক্তিগত শেল আরম্ভের স্ক্রিপ্ট অন্যথায় একটি ইন্টারেক্টিভ শেল জন্য পড়া হবে পড়া থেকে।


আমার env এই বিকল্পগুলি স্বীকৃতি দেয় না।
পাওলো কারওয়ালহো

@ পাওলো কারভালহো আপনার সিস্টেম সমর্থন করে না env -i? আপনি কি সিস্টেম চালু?
কুসালানন্দ

দুঃখিত, এটি শেলটিতে কাজ করে। আমি এটিকে একটি স্ক্রিপ্টে রাখার চেষ্টা করেছি এবং কোনওরকম এটি একটি ত্রুটি ছুঁড়েছি।
পাওলো কারভালহো

@ পাওলো কারভালহো দুঃখিত, আপনি কোন আদেশটি টাইপ করেছেন বা আপনার কী ত্রুটি হয়েছে তা আমি দেখতে পাচ্ছি না।
কুসালানন্দ

দুর্দান্ত - ঠিক আমি যা খুঁজছিলাম envআমার পরিবেশ পরিষ্কার করতে, এবং --noprofileসোর্সিং / ইত্যাদি / প্রোফাইল এবং বন্ধুদের --norcএড়াতে এবং sour / .bashrc এবং বন্ধুরা স্রোসিং এড়ানোর জন্য।
ফিলিপ আলভারেজ

28

env -i somecommandখালি পরিবেশে কমান্ড চালায়, যেমনটি এমএমএস ইতিমধ্যে উল্লেখ করেছে

প্রচুর প্রোগ্রাম কিছু গুরুত্বপূর্ণ পরিবেশের ভেরিয়েবলের উপর নির্ভর করে, তাই আপনি এগুলি বজায় রাখতে চাইতে পারেন:

env -i HOME="$HOME" LC_CTYPE="${LC_ALL:-${LC_CTYPE:-$LANG}}" PATH="$PATH" USER="$USER" somecommand

বিকল্পভাবে, আপনি একটি ছোট লগইন-সময় পরিবেশে লগ ইন করতে পারেন।

ssh localhost somecommand

1
Cmdline এ কমান্ড চালানোর সময় কাজ করে। আমি কিভাবে কুঁড়েঘর এই করা না ?, বলে মনে হচ্ছে না কাজ !
বালকি

আশ্চর্যের বিষয়, আমি সীমানা ছাড়াই এবং নামের একটি কমান্ড চালানোর চেষ্টা envকরে সমর্থন করি না । --env -i FOO=bar -- env--
আনতাক

@ আনতাক env -i -- FOO=bar envআসলে হওয়া উচিত আমার খারাপ। এমন নয় যে --দরকারী, যেহেতু কি অনুসরণ এটা দিয়ে শুরু হয় না -
গিলস

বুঝতে পারিনি যে আপনি সর্বদা লোকালহোস্টে shুকতে পারবেন, এটাই দর্শনীয়। সেখানে ব্যবহারের ক্ষেত্রে কী আছে।
এডগার অ্যার্টিওনিয়ান

@ অ্যাডগারআরটিউইউয়ানিয়ান যদি এটি কোনও এসএসএইচ সার্ভার চালাচ্ছে তবে আপনি লোকালহোস্টে এসএসএচ করতে পারেন। প্রোগ্রামাররা কেন এটি নিষেধ করার প্রচেষ্টা চালিয়ে যাবে?
গিলস

4

গৃহীত উত্তর সঠিক হলেও আপনি সাধারণত যা করতে চান তা হ'ল:

env -i bash -l -c "printenv; and any other commands"

এটি আপনাকে খালি কিন্তু কার্যকরী বাশ দেয় (অ ইন্টারেক্টিভ মোডে লগইন করার সময় আপনি যেমন পেয়েছিলেন তেমনই)। এটি উদাহরণস্বরূপ ভাষা, টাইমজোন, হোম, ইত্যাদি সেট করে


এটি পুরোপুরি কার্যকর হয় না কারণ env -iক্লিয়ারস HOME, যার অর্থ bash -lআপনার .bash_profileইত্যাদি খুঁজে পাচ্ছে না আপনি যদি নতুন শর্ট লগইন করতে চান এমন শেলটি চান তবে আপনাকে HOMEপ্রথমে সেট করার জন্য বাড়তি দিকনির্দেশ প্রয়োজন ।
এলিয়ট স্লটার


1

এখানে বেশিরভাগ উত্তরের সমস্যাটি হ'ল এটি 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

1
নোট করুন যে একটি লগইন bashশেল চলবে .bash_loginবা .bash_profile। একটি পরিষ্কার পরিবেশ পেতে, ব্যবহার করুন --noprofileবা HOMEএকটি ডিরেক্টরিতে সেট করুন যাতে এই ফাইলগুলি নেই। আমি মনে করি এটি "পরিষ্কার" দ্বারা আপনি কী বোঝাতে চাইছেন তার উপর নির্ভর করে।
কুসালানন্দ

1
হ্যাঁ, আপনি যদি আক্ষরিক কিছুই না রেখে শেলটি চান তবে কেবল আসল উত্তরটি অনুসরণ করুন এবং করুন env -i bash -c ...। এই উত্তরটি বিশেষত যখন আপনি এমন শেল চান যা দেখে মনে হয় আপনি মেশিনে সদ্য একটি নতুন লগইন করেছেন।
এলিয়ট স্লটার

0

বাল্কির মন্তব্যের উত্তর দিতে (এবং প্রক্রিয়াটিতে আমার নিজের প্রশ্নের উত্তর দেওয়া :-):

% 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.
সেন্টোস .6..6

যদি আমি স্ক্রিপ্ট পরিবর্তন দীর্ঘ যুক্তি ব্যবহার করতে --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.
ScottJ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.