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


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.