পটভূমিতে শেল স্ক্রিপ্ট কীভাবে চালানো যায় এবং কোনও আউটপুট পাওয়া যায় না


111

আমি দুটি শেল স্ক্রিপ্ট লিখেছি a.shএবং b.sh। ইন a.shএবং b.shআমি লুপ জন্য একটি অসীম আছে এবং তারা টার্মিনালে কিছু আউটপুট প্রিন্ট করা হবে। আমি অন্য একটি স্ক্রিপ্ট লিখতে চাই যা উভয়কেই কল করে a.shএবং b.shআমি চাই যে ব্যবহারকারীটি সাথে সাথে টার্মিনালের নিয়ন্ত্রণ পুনরুদ্ধার করুন, পরিবর্তে স্ক্রিপ্টটি অসম্পূর্ণভাবে চালিত হবে এবং আমি টার্মিনালে আউটপুটটি আড়াল করতে চাই।

উত্তর:


220

ব্যবহারের nohupআপনার পটভূমি কাজ একটি দীর্ঘ সময় শেষ করতে সময় লাগে অথবা আপনি শুধু SecureCRT বা কিছু ব্যবহার মত লগইন সার্ভার পারেন।

আউটপুট উপেক্ষা করতে stdout এবং stderr পুনর্নির্দেশ /dev/null

nohup /path/to/your/script.sh > /dev/null 2>&1 &

কেবল যোগ করার জন্য, কখনও কখনও স্ক্রিপ্টগুলির জন্য যুক্তি থাকে তবে উপরের কমান্ডটি দ্ব্যর্থহীন আউটপুট পুনঃনির্দেশিত করবে
sabertooth1990

আমি খুঁজে পাওয়া আরও ভাল উপায় হ'ল nohup /path/to/your/script.sh parameter1 > & 1 &যদি কেউ আরও ভাল উপায় জানে তবে তা ব্যবহার করা ।
sabertooth1990

17
আপনি /dev/null 2>&1যদি nohupএটি ইতিমধ্যে সমস্ত STDOUT এবং STDERR স্ট্রিমিকে nohup.out ফাইলটিতে স্বয়ংক্রিয়ভাবে যুক্ত করে থাকেন তবে আপনার প্রয়োজন নেই। কেবলমাত্র ব্যবহার করুন:nohup /path/to/your/command &
লিওনার্দো

1
@ sabertooth1990 আপনার কমান্ড লাইনটি ত্রুটিযুক্ত:-bash: syntax error near unexpected token '&'
নোটস-জেজে

1
তাহলে আপনি কীভাবে তৈরি প্রক্রিয়াটিকে হত্যা করবেন?
অ্যালেক্সিস_এ

32

আউটপুটটিকে কোনও ফাইলে পুনঃনির্দেশ করুন:

./a.sh > somefile 2>&1 &

এটি স্টডআউট এবং স্টডার উভয়কেই একই ফাইলে পুনর্নির্দেশ করবে। আপনি যদি stdout এবং stderr দুটি পৃথক ফাইলে পুনর্নির্দেশ করতে চান তবে এটি ব্যবহার করুন:

./a.sh > stdoutfile 2> stderrfile &

আপনি /dev/nullযদি স্টাডাউট এবং / অথবা স্টাডার সম্পর্কে চিন্তা না করেন তবে আপনি ফাইল দুটি বা একটি হিসাবে ব্যবহার করতে পারেন ।

পুনঃনির্দেশগুলি সম্পর্কে বিশদ জানতে বাশ ম্যানপেজটি দেখুন ।


23

দুঃখিত এটি কিছুটা দেরীতে হলেও সোমাল কমান্ডের আদর্শ সমাধান খুঁজে পেয়েছে যেখানে আপনি কোনও মানক বা ত্রুটি আউটপুট চান না (যেখানে creditণ দেওয়ার দরকার সেখানে: http://felixmilea.com/2014/12/running-bash-commands-background -সমর্থক / )

এই আউটপুটটি বাতিল হয়ে যায় এবং স্ক্রিনটি পরিষ্কার রাখে:

command &>/dev/null &

2
দ্রষ্টব্য: টার্মিনালটি বন্ধ হয়ে গেলে কমান্ডটি সমাপ্ত হবে।
কলা

1
ভবিষ্যতে এটি দেখার জন্য যে কেউ একটি অধিবেশন শেষ হওয়ার পরে কমান্ডগুলি চলমান রাখার সমাধান চায়, আমি স্ক্রিন বা টিএমউক্সের পরামর্শ দেব। এগুলি একটি 'একটি অধিবেশনের মধ্যে একটি অধিবেশন' চালানো আবশ্যক যা আপনি প্রাথমিক সেশনটি বন্ধ করার পরে বহন করে। আপনি আবার লগ ইন করলে আপনি চলমান অধিবেশনটিতে পুনরায় সংযোগ স্থাপন করতে পারেন rs
দান্তেআলিঘিয়ারি

13

যদি সেগুলি আপনার স্ক্রিপ্টের মতো একই ডিরেক্টরিতে থাকে তবে এতে:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

দ্য &শেষে কি ব্যাকগ্রাউন্ডে রান আপনার স্ক্রিপ্টটি করে তোলে।

> /dev/null 2>&1অংশ প্রয়োজনীয় নয় - এটা stdout- এ পুননির্দেশনা এবং দ্বারা stderr স্ট্রীম করে যাতে আপনি টার্মিনাল, যা আপনি আউটপুট প্রচুর সঙ্গে সশব্দ স্ক্রিপ্টের জন্য কাজ করতে চান পারে তাদের দেখতে হবে না।


7

বিজ্ঞপ্তিগুলি সরাতে এবং এসটিডিআউট এবং এসটিডিআরআর বন্ধ করতে একটি সাব-শেল চালান:

(&>/dev/null script.sh &)

এটি কেবলমাত্র উত্তর যে পটভূমি কাজ লগ প্রিন্ট নন [1] + 54765 done <emacs>তোমাকে ধন্যবাদ
Alper

2

আপনি যদি একটি লিনাক্স কিকস্টার্ট স্ক্রিপ্টটি চালাতে চান তবে আপনাকে নীচের মত চালাতে হবে।

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &


0

এই উদাহরণগুলি ভাল কাজ করে:

nohup sh prog.sh proglog.log 2> & 1 &

লুপের জন্য আপনি এটি ব্যবহার করতে পারেন:

আমার জন্য {1..10}; do sh prog.sh; ঘুম 1; প্রোগ্রাম করা হয়েছে .. 2> & 1 &

এটি ব্যাকগ্রাউন্ডে কাজ করে এবং কোনও আউটপুট দেখায় না।

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