ফাংশনটি ফিরে আসে, তবে কমান্ড প্রতিস্থাপনটি ব্লক করে, কারণ আপনি একটি ব্যাকগ্রাউন্ড জব তৈরি করেছেন, তবে আপনার স্টাডআউট এফডি খোলা আছে। এর >/dev/null
আগে যোগ করে এটি বন্ধ করুন &
।
#!/bin/bash
function start {
leafpad >/dev/null &
echo $!
}
PID=$(start)
echo "PID is $PID"
আপনি যদি চান যে আপনার প্রক্রিয়াটি স্টিডিন, স্টাডআউট, স্টার্ডার বন্ধ থাকে তবে এটি ব্যবহার করুন:
leafpad >/dev/null 0>&1 2>&1 &
এটি স্টিডিন (0), স্টডআউট (1) এবং স্ট্ডার (2), তারপরে পটভূমি (&) বন্ধ করবে। এছাড়াও, এই স্ট্রিম পুনঃনির্দেশগুলি ব্যবহার করার সময় সেগুলি "ধোঁকা" করা ভুলে যাবেন না, এর অর্থ কার্যকর করার ক্রমে সদৃশ।
1>/dev/null 2>&1
এবং
2>&1 1>/dev/null
একই না! পূর্ববর্তী সময়ে, আপনি একটি স্ট্রিমটিকে / dev / নাল (যা আপনি চান) তে নকল করে চলেছেন, পরবর্তীকালে, আপনি স্টাডারের প্রতি / dev / stdout ডুপ্লিকেট করছেন এবং তারপরে স্টডআউট বন্ধ করছেন। সুতরাং প্রেরিত কোনও বার্তা stderr
আপনার কনসোলে উপস্থিত হবে।