কেন করেছিলে ; & পরে ব্যাশে একটি অপ্রত্যাশিত টোকেন ত্রুটি ফিরে?


21

আমি ত্রুটিটি পেয়েছি:

বাশ: অপ্রত্যাশিত টোকেনের নিকটে সিনট্যাক্স ত্রুটি `; '

নিম্নলিখিত কমান্ডের কারণে:

evince foo.pdf bar.pdf &; emacs foo.tex &

কোনও কাজের পটভূমি ;ব্যবহার &করার সাথে সাথে কমান্ডগুলি আলাদা করা কি আমি অবৈধ ? বা এটি কাজ না করে অন্য কারণ আছে?

ধন্যবাদ.

উত্তর:


40

আপনার সেমিকোলনের দরকার নেই। এটি ব্যাকগ্রাউন্ডে প্রেরণের পরে অন্য কমান্ড পাওয়া বিনামূল্যে।

evince foo.pdf bar.pdf & emacs foo.tex &

2
শপথ গ্রহণের 2 ঘন্টা পরে এটি আমাকে বিবৃতি দিয়ে সহায়তা করেছিল। কারও যদি if [ $(ps -ef |grep -c '[p]grep') -eq 0 ]; then nohup sleep 5 > /dev/null 2>&1</dev/null & fi
এটির

13

বিটিডাব্লু, মূল সমস্যাটি হ'ল (বোর্ন-উত্পন্ন) শেলগুলি খালি কমান্ডের অনুমতি দেয় না।

";" এবং "এবং" হ'ল কমান্ড টার্মিনেটর, যার অর্থ যথাক্রমে fg এবং bg। সুতরাং ";" (বা ";" একটি লাইনের শুরুতে) অবৈধ।

(নিউলাইন (গুলি) বোঝায় ";" যদি এখনও অবিরত সমাপ্ত কমান্ড না থাকে, যদি না আপনি লাইনটি চালিয়ে যেতে "\" ব্যবহার করেন।)

এই নীতিগুলিতে ভাষা অনেকগুলি পরিবর্তিত হয়:

সি-প্রাপ্ত ভাষাগুলি খালি বিবৃতি দেয়।

পাস্কাল এবং পিইআরএল এর বিভাজক রয়েছে, টার্মিনেটর নয়।


-3

না, এটি কেবল বিভ্রান্ত এবং আপনার বোঝার অর্থটি বেশ কার্যকর করতে পারে না।

আপনি যে কমান্ডটি ব্যাকগ্রাউন্ডে রাখতে চান তা দিয়ে & গ্রুপ করতে হবে:

$ (evince foo.pdf bar.pdf &); emacs foo.tex &

এটা ঠিক কাজ করে। আরও স্পষ্ট হবে:

$ (evince foo.pdf bar.pdf &); (emacs foo.tex &)

বিশেষত আপনি যদি পরে শেষের পরে আরও কমান্ড চেইন করতে চান।


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