एक नए tmux सेशन में कोड कैसे निष्पादित करें - वर्तमान सत्र के भीतर से?


13

मैं Ubuntu 16.04 का उपयोग करता हूं और मुझे निम्नलिखित tmuxसमाधान की आवश्यकता है क्योंकि मैं sleepअपने विशेष मामले के साथ एक टाइमआउट प्रक्रिया चलाना चाहता हूं जिससे मैं संतुष्ट नहीं था atऔर nohup(जब संयोजन nohup-sleep) के साथ एक बग का सामना करना पड़ा था । अब, tmuxसबसे अच्छा विकल्प के रूप में लगता है क्योंकि इसका अपना स्वयं का हैंगअप तंत्र है और वास्तव में मैनुअल उपयोग में ठीक काम कर रहा है (मैं केवल उस प्रक्रिया को स्वचालित करने के संबंध में प्रश्न पूछता हूं जो मैं पहले से मैन्युअल रूप से कर सकता हूं)।

क्या चाहिए मुझे:

मुझे निम्न 3 कार्यों को करने के लिए एक तरीका चाहिए, एक ऑपरेशन में:

  1. एक नया tmuxसत्र संलग्न करना ।
  2. उस सत्र के लिए कमांड के एक तैयार सेट को इंजेक्ट करना, जैसे (sleep 30m ; rm -rf dir_name ; exit)। मैं विशेष रूप से एक बहु-पंक्ति सेट पसंद करूंगा, और एक लंबी पंक्ति नहीं।
  3. उपरोक्त आदेश को निष्पादित करते हुए उस क्षण को सेट किया गया जिसे नए tmuxसत्र में स्टडिन के रूप में लिखा जाना था ।

दूसरे शब्दों में, मैं एक अन्य tmuxसत्र में निर्धारित कोड को निष्पादित करना चाहता हूं जो विशेष रूप से उस कारण के लिए बनाया गया था, लेकिन सभी को एक ऑपरेशन में करने के लिए।


टिप्पणियाँ:

  • मेरा लक्ष्य अपने सभी मूल कार्य सत्रों से (जो मैं ज्यादातर समय काम करता हूं) से करना है। आम तौर पर, मेरा नए बने सत्र में जाने का कोई इरादा नहीं है, मैं बस इसे अपने आप ही निष्पादित कोड के साथ बनाना चाहता हूं और यही है।

  • यदि संभव हो तो, मैं एक वंशानुगत समाधान पसंद करूंगा। मुझे लगता है कि यह सबसे कुशल है।

जवाबों:


18

यदि आप उस कोड को डालते हैं जिसे आप उदाहरण के लिए निष्पादित करना चाहते हैं /opt/my_script.sh, तो यह करना बहुत आसान है कि आप क्या चाहते हैं:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

यह एक नया अलग सत्र शुरू करता है, जिसका नाम "myTempSession" है, जो आपकी स्क्रिप्ट को निष्पादित करता है। आप इसे बाद में जांचने के लिए इसे संलग्न कर सकते हैं कि यह क्या कर रहा है tmux attach-session -t myTempSession

यह मेरी राय में सबसे सीधा और सुंदर समाधान है। मुझे स्टड से कमांड को निष्पादित करने के किसी भी आसान तरीके के बारे में पता नहीं है (tmux के साथ "heredocs से पढ़ें")। आपके आस-पास हैक करके आप इसे करने में सक्षम भी हो सकते हैं, लेकिन यह अभी भी एक हैक होगा (और जैसा दिखेगा)।

उदाहरण के लिए, यहां एक हैक जो कि ऊपर दी गई कमांड का उपयोग करता है जो आप चाहते हैं कि व्यवहार को अनुकरण करने के लिए (= heredoc से एक नए tmux सत्र में कोड निष्पादित करें। अस्थायी फ़ाइल बनाई गई है, जैसा कि सर्वर की हार्ड ड्राइव पर कोई लेखन नहीं होता है /dev/shm, जो एक tmpfs):

(
  cat >/dev/shm/my_script.sh &&
  chmod +x /dev/shm/my_script.sh &&
  tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
    echo "hacky, but works"
EOF

1
प्रिय मारियो। हमेशा अपने जवाब पढ़ने के लिए एक खुशी है। मुझे यकीन नहीं है कि अगर मैं सही समझता हूं, तो कृपया मुझे बताएं कि क्या मैं गलत हूं: 1.ऐसा करने के दो तरीके हैं, एक में पहले एक अस्थायी स्क्रिप्ट बनाना शामिल है (जिसमें कोड शामिल है) और इसे निर्माण के साथ निष्पादित करें और दूसरा एक वंशानुगत है मार्ग। 2.यदि दूसरा तरीका काम करता है (जब प्रत्येक इको रो में हेरेडोक की प्रत्येक कोड पंक्ति होती है) तो हमें इसे बैश वैध कोड होने पर हैक के रूप में क्यों देखना चाहिए? शायद इसलिए कि हेरेडोक की पंक्तियों को प्रतिध्वनित किया जाता है और नियमित रूप से हेरेडकोस में निष्पादित नहीं किया जाता है?
जॉनडोए

2
@ बेनिया यह एक हैक है क्योंकि यह केवल कुछ यूनिक्स सिस्टम पर काम करता है /dev/shm। यह भी एक हैक है क्योंकि यह अधिक जटिल है, पढ़ने में मुश्किल है, समझने के लिए और केवल एक साधारण फाइल पर स्क्रिप्ट लिखने और उसके साथ शुरू करने से बनाए रखने के लिए tmux
कुसलानंद

1
जैसा कि @ कुसलानंद ने समझाया, कोड निष्पादन के लिए हेरेडोक्स सामान्य रूप से बुरे व्यवहार हैं। बदसूरत और बदसूरत, यह काम करता है, लेकिन यह आपको अन्यथा बहुत ही सरल सामान करने के लिए राउंडअबाउट रास्ता खोजने के लिए मजबूर करता है ... जवाब में पहले और दूसरे कोड ब्लॉक की तुलना करें: क्या आप बता सकते हैं कि यह कैसे काम करता है? आपको ऐसा करने में कितना समय लगता है? यह हैक की तुलना में भी अधिक है क्योंकि tmux में स्टैडेन से कमांड निष्पादित करने का कोई तरीका नहीं है (समान-हैक करने के तरीकों को इतनी बदसूरत तरीके से मैं भी विचार नहीं करूँगा), इसलिए बाहरी स्क्रिप्ट एकमात्र ( 1.आपके प्रश्न का उत्तर ) तरीका है ।
मारियो विटाले

1
क्षमा करें, पहले नमूने में एक गलती थी ("नया-सत्र" कमांड निहित नहीं है यदि आप तर्क का उपयोग करते हैं)। अब यह तय हो गया है।
मारियो विटाले

1
अब जब मैं निष्पादित tmux new-session -d -s "myTempSession" /opt/my_script.shकरता हूं तो कोड पेस्ट करने के लिए मेरे लिए एक अस्थायी फ़ाइल नहीं खुलती है ... मुझे वर्तमान सत्र से सीधे स्क्रिप्ट खोलने के लिए क्या चाहिए, या नए सत्र में स्थानांतरित करने के लिए कम से कम कुछ और फिर सीधे वापस जाना चाहिए वर्तमान सत्र। BTW मैं आपकी सभी मदद के लिए इनाम देने की योजना बना रहा हूं क्योंकि यह कम से कम मैं आपको धन्यवाद देने के लिए कर सकता हूं और मैं 11 घंटे में इनाम दे सकता हूं।
जॉनडियो

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.