क्यों किया ; के बाद और बैश में एक अप्रत्याशित टोकन त्रुटि लौटें?


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

BTW, मुख्य मुद्दा यह है कि (बॉर्न-व्युत्पन्न) गोले खाली कमांड की अनुमति नहीं देते हैं।

"," और "&" क्रमशः कमांड टर्मिनेटर हैं, जिसका अर्थ क्रमशः fg और bg है। इसलिए "; ;" (या ";" एक पंक्ति की शुरुआत में) भी अमान्य है।

(न्यूलाइन (ओं) का अर्थ ";" यदि कोई अभी तक समाप्त नहीं हुई कमांड है, जब तक कि आप लाइन जारी रखने के लिए "\" का उपयोग नहीं करते हैं। "

भाषा इन नीतियों पर बहुत भिन्न होती है:

सी-व्युत्पन्न भाषाएं खाली बयान देने की अनुमति देती हैं।

पास्कल और पेरेल में विभाजक हैं, न कि टर्मिनेटर।


-3

नहीं, यह सिर्फ उलझन में है और आप क्या मतलब है काफी बाहर काम नहीं कर सकता।

आपको उस कमांड के साथ समूह बनाना होगा, जिसे आप पृष्ठभूमि में रखना चाहते हैं:

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

यह ठीक काम करता है। इससे भी अधिक स्पष्ट होगा:

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

खासकर यदि आप अंत के बाद और अधिक आदेशों की श्रृंखला बनाना चाहते थे।


1
एक अनावश्यक अर्ध-बृहदान्त्र के उपयोग को सही ठहराने के लिए एक उपधारा को स्पॉन करने की आवश्यकता नहीं है। कोष्ठक सिर्फ वाक्यविन्यास नहीं हैं; वे अतिरिक्त काम करने का कारण बनते हैं।
— Chepner
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.