ps aux | grep node | grep -v grep | awk '{print $2}' | xargs kill -9

मैं सभी Node.js प्रक्रियाओं (उबंटू) को मारने के लिए उपरोक्त कमांड का उपयोग करता हूं, लेकिन अगर कोई नोड प्रक्रिया नहीं चल रही है तो यह एक त्रुटि (stderr) दिखाएगा। क्या xargs कुछ भी प्राप्त करने से बचने के लिए पाइपलाइन में if स्टेटमेंट का उपयोग करना संभव है?

कुछ इस तरह:

ps aux | grep node | grep -v grep | awk '{print $2}' | if [ $pip ] ; then
    xargs kill -9 $pip
fi
0
Aero Wang 31 मार्च 2020, 08:00

3 जवाब

सबसे बढ़िया उत्तर

man xargs:

   -r, --no-run-if-empty
          If the standard input does not contain any nonblanks,
          do not run the command.  Normally, the command is run
          once even if there is no input. This option is a GNU
          extension.
2
that other guy 31 मार्च 2020, 08:04
धन्यवाद! लेकिन मान लें कि अगर मैं xargs का उपयोग नहीं कर रहा हूं, तो क्या if...then करने का कोई सार्वभौमिक तरीका है?
 – 
Aero Wang
31 मार्च 2020, 08:45
आप echo foo | { x=$(cat); if [ "$x" ]; then echo "Contents: $x"; fi; } जैसी चीजें कर सकते हैं, लेकिन पाइपलाइन के आउटपुट को कैप्चर करना और इसके बजाय उस पर कार्य करना बेहतर लगता है
 – 
that other guy
31 मार्च 2020, 08:55

यदि आप उबंटू पर हैं, तो pkill पर एक नजर डालें। इसे पूरी पाइपलाइन की देखभाल करनी चाहिए।

pkill -9 node
1
rtx13 31 मार्च 2020, 08:04

अन्य उत्तर सही हैं और संभवत: संभावित XY समस्या का समाधान करते हैं, लेकिन प्रश्न के शीर्षक का उत्तर नहीं देते हैं।

हां, एक पाइप में "if" का उपयोग करना संभव है। उदाहरण के लिए:

cd /tmp
touch a1 a2 a3
ls    # results a1 a2 a3 systemd-private...
ls | grep ^a | if grep a1; then echo yes; done

का परिणाम:

a1
हां

तथा

ls | grep ^a | if grep -e a1 -e a2; then echo yes; done  

आउटपुट

a1
a2
हां

यहाँ क्या हो रहा है? पाइपलाइन को सामान्य रूप से निष्पादित किया जाता है, क्योंकि "अगर" अपनी स्थिति चलाता है। पाइपलाइन समाप्त होने के बाद, "अगर" अभी भी जीवित है, तो इसके तर्क से बाहर निकलने का परिणाम मिलता है, और जो करने के लिए कहा जाता है वह करता है (यहां, "हां गूंजें", केवल अगर grep को कुछ मैच मिला)।

एक और सबूत पाने के लिए:

ls | grep ^a | if grep a4; then echo yes; done

परिणाम कुछ भी मुद्रित नहीं किया जा रहा है, मानक आउटपुट से कुछ भी नहीं है और, अधिक महत्वपूर्ण बात यह है कि कोई "ईको हां" निष्पादित नहीं किया गया है।

प्रसंस्करण के अंत में कुछ मामलों में कुछ करने के लिए यह उपयोगी हो सकता है, लेकिन मुझे संदेह है कि इसके कई अन्य उपयोग हो सकते हैं।

1
linuxfan says Reinstate Monica 31 मार्च 2020, 09:07