बैश में सु के साथ कई कमांड चल रहे हैं


10

मैं पूरी तरह से su -cकई कमांड रूट के रूप में चलाने के लिए उपयोग करना चाहूंगा । मैं इसके लिए एक अतिरिक्त स्क्रिप्ट का उपयोग नहीं करना चाहता।

मैंने निम्नलिखित कोशिश की:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & " -c "ls -lh"

लेकिन यह केवल lsपहले वाले को ही अंजाम देता है ।

मैंने निम्नलिखित कोशिश की:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

लेकिन यह कहता है कि अर्धविराम के साथ एक त्रुटि है ;

क्या आप जानते हैं कि वह काम कैसे करना है?

जवाबों:


14

यह आदेश ठीक चलता है:

su root -c "date; ls -lh"

लेकिन इस आदेश में:

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

चूंकि आपके पास &पहले है ;इसलिए आपको त्रुटियां हो रही हैं। &कमांड को हटाने और पुनः निष्पादित करने का प्रयास करें ।

या आप इस तरह से अपनी कमांड चला सकते हैं:

su root -c "(tcpdump -i wlan0 -s 1500 -w CCCCCC &); ls -lh"

बेशक, कोष्ठक जोड़ने का कोई कारण नहीं है जब तक कि ओपी वास्तव में वास्तव; में tcpdumpऔर lsकमांड के बीच टाइप नहीं करना चाहता है - बस अर्धविरामों को छोड़ दें और यह काम करेगा।
जी-मैन का कहना है कि 'मोनिका' बहाल

2

जैसा कि शुभ कहते हैं , आपका

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ; ls -lh;"

आदेश विफल हो रहा है क्योंकि आपको &तुरंत इसके बाद अनुमति नहीं दी गई है ;। आप इसे केवल शेल में सीधे कमांड टाइप करके देख सकते हैं:

  • true & true  काम करता है
  • true & ; true काम नहीं करता है

यदि आप चाहते हैं कि tcpdumpकमांड बैकग्राउंड में चले ;, तो जैसे भी हो , उसे हटा दें

su root -c "tcpdump -i wlan0 -s 1500 -w CCCCCC & ls -lh;"

(और आपको ;अंत में ज़रूरत नहीं है , या तो, लेकिन यह चोट नहीं करता है)।


1

मुझे लगता है कि nohupकमांड आपको वही मिलेगा जो आप भी चाहते हैं ... बैकग्राउंड में चलने वाला tcpdump (कोई एम्पर्संड आवश्यक नहीं):

su root -c "nohup tcpdump -i wlan0 -s 1500 -w CCCCCC ; ls -lh"

हाय मुझे ऐसा लगता है। उपयोगकर्ता के डिस्कनेक्ट होने पर भी NOHUP पृष्ठभूमि में चल रहा है। मुझे वह याद नहीं था। बहुत बहुत धन्यवाद।

(1) nohupजब आप बैकग्राउंड में कमांड चलाते हैं, तो इसका उपयोग करना अच्छा होता है , लेकिन इसका इस सवाल से कोई लेना-देना नहीं है। (२) यह उत्तर गलत है - nohupस्वयं पृष्ठभूमि में चलने के लिए कोई आदेश नहीं देता है; आपको अभी भी टाइप करना है &(जो हमें वापस छोड़ देता है जहां हमने शुरू किया था, कमांड में एक सिंटैक्स त्रुटि के साथ)।
जी-मैन का कहना है कि 'मोनिका'

0

बस अनुभा के उत्कृष्ट उत्तर को जोड़ने के लिए :

आप {}इस तरह का उपयोग कर सकते हैं :

su root -c "{ tcpdump -i wlan0 -s 1500 -w CCCCCC & }; ls -lh"

{}इस से थोड़ा अधिक कुशल है ()कि यह एक उप खोल नहीं बनाता है। जब तक हम पहले से ही एक के {}बाद {एक और ;पहले एक जगह की जरूरत है ।}&


बेशक, ब्रेसिज़ या कोष्ठक जोड़ने का कोई कारण नहीं है जब तक कि उपयोगकर्ता वास्तव में वास्तव; में tcpdumpऔर lsकमांड के बीच टाइप नहीं करना चाहता है - बस अर्धविराम को छोड़ दें और यह काम करेगा।
जी-मैन ने

-1

&&अपनी आज्ञाओं को अलग करने के लिए उपयोग करें :

$ su -c "ls && ls"

आउच..मेरी त्रुटि। मैं इस प्रक्रिया को पृष्ठभूमि में चलाना चाहता था, लेकिन मुझे इस && के बारे में अलग-अलग आदेशों की जानकारी नहीं थी। Thx

3
&& का अर्थ है "केवल पहली बार सफल होने पर दूसरी कमांड निष्पादित करें"। यदि आपकी पहली कमांड त्रुटी है, तो दूसरा नहीं चलेगा। यह आमतौर पर अच्छा है, लेकिन मैं विशुद्ध रूप से एक विभाजक के रूप में वर्णन करने में संकोच करूंगा।
सिंह

और, अगर आप tcpdumpप्रक्रिया को पृष्ठभूमि में चलाना चाहते हैं, तो &&क्या आपके पास कोई अच्छा नहीं है।
जी-मैन का कहना है कि 'मोनिका' बहाल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.