প্রক্রিয়া প্রতিস্থাপন <(…) একটি পাইপ তৈরি করে, একটি পাইপ দেয় যা পাইপ /dev/fdযেখানে রয়েছে সেখানে ফাইল বর্ণনাকারীর সমতুল্য হয় এবং ফাইলটির নাম প্রোগ্রাম হিসাবে যুক্তি হিসাবে পাস করে। এখানে প্রোগ্রামটি রয়েছে sudoএবং এটি সেই যুক্তিটি (যা কেবল একটি স্ট্রিং, যতদূর এটি সম্পর্কিত) পাস করে wpa_supplicant, যা এটি ফাইলের নাম হিসাবে বিবেচনা করে।
সমস্যাটি হ'ল সুডো স্ট্যান্ডার্ড ফাইলগুলি ব্যতীত সমস্ত ফাইল বর্ণনাকারী বন্ধ করে দেয় (stdin = 0, stdout = 1 এবং stderr = 2)। প্রক্রিয়া প্রতিস্থাপনের পাইপটি অন্য বর্ণনাকারীর উপরে রয়েছে, যা বন্ধ হয়ে যায়, তাই যখন wpa_supplicantএটি খোলার চেষ্টা করে, এটি একটি ফাইল খুঁজে পায় যা বিদ্যমান নেই।
যদি আপনার সুডো নীতি এটির অনুমতি দেয় ( closefrom_overrideবিকল্প সক্ষম), আপনি ফাইল বর্ণনাকারী বন্ধ না করার জন্য এটি বলতে পারবেন। তবে সাধারণত এটি হয় না।
sudo -C 64 wpa_supplicant … -c <(wpa_passphrase …)
বিকল্পভাবে, যেহেতু আপনি স্ট্যান্ডার্ড ইনপুট ব্যবহার করছেন না, তাই সেখানে ডেটাটি পাস করুন।
wpa_passphrase … | sudo wpa_supplicant … -c /dev/stdin
বিকল্পভাবে, sudo থেকে একটি শেল চালান এবং প্রক্রিয়া বিকল্পটি সেখানে রাখুন। কমান্ডটিতে বিশেষ অক্ষর রয়েছে কিনা তা উদ্ধৃতি সহ যত্ন নিন।
sudo bash -c 'wpa_supplication … -c <(wpa_passphrase …)'