আমার টার্মিনালের যে কোনও কমান্ড শূন্য-কোড ছাড়াই আমার টার্মিনাল উইন্ডোটি বন্ধ করে দেয়


22

প্রথমে এটি কিছুটা মজার ছিল, "বাশ রুলেট" খেলার মতো ... তবে এখন এটি পুরনো লোল

আমার টার্মিনালের যে কোনও কমান্ড শূন্য-কোড ছাড়াই আমার টার্মিনাল উইন্ডোটি বন্ধ করে দেয়

আমাকে বলা হয়েছিল যে সম্ভবত আমার আছে set -e কোথাও কোনও ব্যাশ স্ক্রিপ্ট সেট যা আমার টার্মিনাল সূত্র sources

আমি চেক করেছি .bash_profile/ .bashrc/ .profileএবং দেখে মনে হচ্ছে নাset -e হচ্ছে এটি সেখানে নেই।

অন্য কোন সুস্পষ্ট অপরাধী আছে?


7
একটি কার্যকর করুন set +e, এটি সমস্যাটি মেরামত করে? যদি তাই হয়, যা আমি ধরে নিই, তবে আপনার এটি সন্ধান করা দরকার set -e। এটি এই ফাইলগুলির গ্লোবাল সংস্করণগুলির মধ্যে থাকতে পারে /etcবা এগুলি থেকে নেওয়া অন্য কোনও স্ক্রিপ্টে থাকতে পারে। আপনার কনফিগারেশন ফাইলগুলি সরিয়ে ফেলুন, যদি সমস্যাটি স্থির হয়ে থাকে তবে এটি কোথায় ব্রেক হয়েছে তা দেখতে ছোট অংশগুলিতে লাইনগুলি যুক্ত করুন।
egmont

3
PS4=' ${BASH_SOURCE}:$LINENO: ' bash -lixc true |& grep -e set -e trapতথ্যবহুল হতে পারে।
মুড়ু

আপনি বিশেষ পরিবর্তনশীল সঙ্গে বর্তমানে সক্ষম শেল পতাকার সেট পরিদর্শন করতে পারেন -যেমন: echo $-
ডেভিড ফোস্টার

উত্তর:


21

ঠিক আছে, তাই সত্যই, এটি ছিল এক পথচলা set -eযা আমার সমস্যার কারণ হয়েছিল।

আমি যেভাবে set -eব্যবহার করছিলাম তা পেয়েছিbash -lx

সবচেয়ে ভাল জিনিসটি হ'ল ব্যবহার করা:

bash -lx > lx.log 2>&1

তারপরে সেই লগ ফাইলটি খুলুন এবং অনুসন্ধান করুন set...

একবার যদি আপনি এই পথে set -eঅগ্রসর হন তবে আপনি সেই লাইনটি সরিয়ে ফেলতে পারেন এবং আপনার সমস্যাটি চলে যেতে হবে! (মেশিন পুনঃসূচনা একটি ভাল ধারণা হতে পারে)।

আমার ক্ষেত্রে, set -eফাইলটি সেই ফাইলটিতে ছিল যা ব্যাশ_প্রোফাইল উত্স, তবে লাইনটি নিজেই .বাশ_প্রফাইলে ছিল না।


3
sourceআপনার শেলটিতে যে জিনিসগুলি নিরাপদে আছে সেগুলি কেবল "এলোমেলো শেল স্ক্রিপ্টস" এর চেয়ে অনেক ছোট সেট। -eবোবা ত্রুটি পরীক্ষা করার জন্য, প্রকৃত স্ক্রিপ্টগুলিতে দরকারী হতে পারে। (অথবা আপনি কোনও কিছুই ত্রুটি-চেক করতে ভুলে
পিটার

স্পষ্টতই এটির ক্ষেত্রে ... আমার ইচ্ছা যদি এমন কিছু ছিল global set -eযা set -eকেবলমাত্র স্ক্রিপ্টকেই প্রভাবিত করে
আলেকজান্ডার মিলস

@ আলেকজান্ডারমিলস, এটি করার জন্য, আপনি $-অভ্যন্তরীণ স্ক্রিপ্টে পতাকাটি পরীক্ষা করতে এবং শেষে তার অবস্থার পুনরুদ্ধার করতে পরীক্ষা করতে পারেন, বা যদি আপনি জানেন যে আপনার কাছে এটি নির্ধারণ করা স্ক্রিপ্টগুলি রয়েছে
ইলক্কাছু

সুতরাং আমি অনুমান করি local set -eযে কেবল কোনও ব্যাশ ফাংশনেই ব্যবহার করা যায়?
আলেকজান্ডার মিলস

13

আপনি যদি সমস্যাটি সমাধান করতে চান তবে set +eআপনার .bashrc- এর শেষে অন্তর্ভুক্ত করুন।

আপনি খোঁড়াখুঁজি করতে পারেন — এমন আরও অনেক জায়গা রয়েছে যেখানে একটি জায়গা set -eথাকতে পারে - তবে এটি খুব যত্ন নেবে।

তবে, set -eঅংশটি যদি আপনার অংশ হয় তবে উপরেরটি $PROMPT_COMMANDকাজ করবে না। printf '%s\n' "$PROMPT_COMMAND"এটিতে দেখুন এবং দেখুন


আমার মেশিনে, যখন আমি একটি টার্মিনাল খুলি, printf '%s\n' "$PROMPT_COMMAND"কেবল সাদা জায়গা পাওয়া যায়, কিছুই নেই
আলেকজান্ডার মিলস

@ আলেকজান্ডারমিলস, তাহলে আপনার সমস্যাটি তা নয়। এর জন্য একটি সাধারণ ব্যবহার $PROMPT_COMMANDহ'ল টার্মিনাল ট্যাব নাম বা উইন্ডোর নাম আপডেট করা; ম্যাকস এক্স এবং উবুন্টু দুজনেই এটি করে। ম্যাকের জন্য ডেটার জন্য Apple.stackexchange.com/q/220641/151730 দেখুন ।
ওয়াইল্ডকার্ড

আমি সমস্যা একটি উত্তর পাওয়া গেছে এবং আমার নিজের উত্তর যোগ set +eকরবেন কাজ করেনি, সম্ভবত কারণ এটা ছিল আগেset -e আমার সোর্সড ব্যাশ ফাইল কল।
আলেকজান্ডার মিলস

1
@ আলেকজান্ডারমিলস, হ্যাঁ, আমি ভেবেছিলাম এটি অন্তর্নিহিত। আমি বলতে চাইছিলাম set +e আপনার সাথে সংযুক্ত করা .bashrc, এটি শুরুতে রাখা হয়নি। আমি এখন আমার উত্তরে তা স্পষ্ট করে দিয়েছি। আপনি উত্স খুঁজে পেয়েছি যে ভাল!
ওয়াইল্ডকার্ড

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