আপনি ব্যবহার করতে পারেন ।exec ./your-script
জিনোম টার্মিনালের মতো একটি টার্মিনাল এমুলেটর যখন প্রারম্ভিক প্রক্রিয়াটি এর অভ্যন্তরে চলমান থাকে - যা সাধারণত শেল হয় - প্রস্থান করে।
যদি আপনি ইতিমধ্যে একটি টার্মিনালে রয়েছেন এবং সেই টার্মিনালটি প্রস্থান করার আগে আপনি কেবলমাত্র যা করতে চান তা হল একটি নির্দিষ্ট স্ক্রিপ্ট (বা প্রোগ্রাম) চালানো, তবে এর অর্থ আপনার আর এটিতে চলমান শেলটির আর দরকার নেই। সুতরাং আপনি execশেলটি নিজের কমান্ড দ্বারা নির্মিত প্রক্রিয়াটির সাথে নিজেকে বদলে দেওয়ার জন্য শেলের বিল্টিন ব্যবহার করতে পারেন ।
- আপনার স্ক্রিপ্টের ক্ষেত্রে এটি অন্য শেল প্রক্রিয়া - ঠিক যেমনভাবে আপনি যখন স্ক্রিপ্টটি চালাবেন তখন দ্বিতীয় শেল প্রক্রিয়াটি কীভাবে তৈরি হয়
exec।
সিনট্যাক্স হল , যেমন ।exec commandexec ./your-script
exec: একটি উদাহরণ
উদাহরণস্বরূপ, ধরুন আমার কাছে একটি শেল স্ক্রিপ্ট রয়েছে, যা countএক্সিকিউটেবল হিসাবে চিহ্নিত এবং বর্তমান ডিরেক্টরিতে অবস্থিত। এতে রয়েছে:
#!/usr/bin/env bash
for i in {5..1}; do echo $i; sleep 1; done
এবং, একটি টার্মিনালে আমি চালাচ্ছি:
exec ./count
এই ছাপে সংখ্যাসমূহ 5, 4, 3, 2, এবং1 প্রতি সেকেন্ডে এক, এবং তারপর টার্মিনাল উইন্ডোর বন্ধ করে।
যদি আপনি এটি আপনার টার্মিনালে চালিত প্রথম প্রক্রিয়া ব্যতীত অন্য কোনও কিছু থেকে চালান - উদাহরণস্বরূপ, আপনি যদি bashঅন্য শেল উদাহরণ শুরু করার জন্য প্রথমে দৌড়েছিলেন - তবে এটি আপনাকে টার্মিনালটি ছাড়ার পরিবর্তে সেই প্রক্রিয়া তৈরি করার শেলটিতে ফিরিয়ে আনবে। (এই সতর্কতা সমানভাবে প্রযোজ্যexit ভিত্তিক পদ্ধতিতে ))
তুমি ব্যবহার করতে পার ./your-script; exit।
আপনি যদি নিজের শেলটিকে নতুন প্রক্রিয়াটির মাধ্যমে প্রতিস্থাপন করতে না চান (মাধ্যমে) exec ) করতে না বলতে চান তবে আপনি এটি আটকে রাখতে বলতে পারেন তবে নতুন প্রক্রিয়া শেষ হওয়ার সাথে সাথেই নিজেকে ছেড়ে দিতে পারেন।
এটি করার জন্য, আপনার কমান্ড এবং exitকমান্ডটি পৃথক করে চালান; যাতে সেগুলি একটি লাইনে দেওয়া যায়।
সিনট্যাক্স হল command; exit, যেমন ।./your-script; exit
command; exit বনাম command && exit
আপনি এটি কোস এবং হিমাইলের উত্তরগুলিতে প্রস্তাবিত পদ্ধতির অনুরূপ দেখতে পাচ্ছেন । পার্থক্যটি হ'ল:./your-script && exit
&&দ্বিতীয় কমান্ড কেবল তখনই চালিত হয় যদি প্রথম কমান্ডটি জানায় যে এটি শূন্যের একটি প্রস্থান কোড ফিরে পেয়ে সফল হয়েছে।
; প্রথম কমান্ড সাফল্যের রিপোর্ট করেছে কিনা তা বিবেচনা না করে দ্বিতীয় কমান্ড চালায়।
কোনটি আপনি চান তা নির্দিষ্ট পরিস্থিতির উপর নির্ভর করে। যদি কমান্ড ব্যর্থ হয়, আপনি কি কলিং শেলটি (এবং হোস্টিং টার্মিনাল) অবিরত রাখতে চান? যদি তাই হয় তবে ব্যবহার করুন &&; যদি না হয়, ব্যবহার করুন ;।
এছাড়াও আছে command || exit, যা ব্যর্থতাcommand রিপোর্ট করা হলে কলিং শেলটি ছেড়ে দেয় ।