एक स्क्रीन में स्क्रिप्ट चलाएँ


25

मैं एक अलग स्क्रीन में बैश स्क्रिप्ट चलाना चाहता हूं। स्क्रिप्ट कुछ समय के लिए एक कार्यक्रम कहती है, जिनमें से प्रत्येक को प्रतीक्षा करने में बहुत लंबा समय लगता है। मेरा पहला विचार केवल एक स्क्रीन को खोलना था और फिर स्क्रिप्ट को कॉल करना था, लेकिन ऐसा प्रतीत होता है कि मैं ctrl-a dस्क्रिप्ट को चालू नहीं कर सकता (द्वारा )। इसलिए मैंने कुछ शोध किया और इस निर्देश को निम्नलिखित के साथ शेबंग को बदलने के लिए मिला :

#!/usr/bin/screen -d -m -S screenName /bin/bash

लेकिन यह काम नहीं करता है, या तो (विकल्प मान्यता प्राप्त नहीं हैं)। कोई सुझाव?

PS यह मेरे लिए अभी होता है जो screen -dmS name ./script.shशायद मेरे उद्देश्यों के लिए काम करेगा, लेकिन मैं अभी भी उत्सुक हूं कि इसे स्क्रिप्ट में कैसे शामिल किया जाए। धन्यवाद।

जवाबों:


28

कुटिया लाइन आप देखा है कुछ यूनिक्स पर काम कर सकते वेरिएंट, लेकिन लिनक्स पर नहीं। लिनक्स की शेलबैंग लाइनें सीमित हैं: आपके पास केवल एक विकल्प हो सकता है। पूरे स्ट्रिंग को अलग-अलग शब्दों के रूप में पारित करने के बजाय, -d -m -S screenName /bin/bashएक ही विकल्प के screenरूप में पारित किया जाता है।

यदि आप स्क्रीन के अंदर एक स्क्रिप्ट चलाना चाहते हैं और कई फ़ाइलों के साथ गड़बड़ नहीं करते हैं या उद्धृत करते हैं, तो आप स्क्रिप्ट को एक शेल स्क्रिप्ट बना सकते हैं, जो स्क्रीन के अंदर पहले से ही नहीं है तो स्क्रीन को आमंत्रित करता है।

#!/bin/sh
if [ -z "$STY" ]; then exec screen -dm -S screenName /bin/bash "$0"; fi
do_stuff
more_stuff

यह अच्छी तरह से काम करता है, "$0"यहाँ के लिए क्या है ?
Fabich

4
@Lordofdark यह स्क्रिप्ट नाम है। स्क्रिप्ट screenजो चालान करती है, /bin/bashजो स्क्रिप्ट को फिर से आमंत्रित करती है।
गिल्स एसओ- बुराई को रोकना '

16

स्क्रीन मैन पेजों के अनुसार:

  • screen -d -m अलग मोड में स्क्रीन शुरू करें। यह एक नया सत्र बनाता है, लेकिन इसे संलग्न नहीं करता है। यह सिस्टम स्टार्टअप स्क्रिप्ट के लिए उपयोगी है।
  • -S sessionname नए सत्र का नाम सत्रनाम सेट करें।

इसलिए जब मैंने आपके द्वारा प्रदान की गई कमांड चलाई: screen -dmS name ./script.sh

स्क्रीन नाम से एक विंडो शुरू करती है और स्वचालित रूप से उस स्क्रिप्ट को चलाती है। आप जिस प्रकार की स्थिति देखेंगे, उसे देखने के लिए वहां वापस जाएं:screen -r test

अब Ubuntu 14.04 के साथ, कमांड थोड़े अलग हैं। प्रयत्न:

screen -d -m -S test

अब स्क्रिप्ट चलाने के लिए, आपको ऐसा करने के लिए उनकी कॉन्फ़िग फ़ाइल में जाना होगा:

sudo vim /etc/screenrc

वहां पहुंचने के बाद, नीचे स्क्रॉल करें और आप देखेंगे:

# Example of automatically running some programs in windows on screen startup.
#
#   The following will open top in the first window, an ssh session to monkey
#   in the next window, and then open mutt and tail in windows 8 and 9
#   respectively.
#
# screen top
# screen -t monkey ssh monkey
# screen -t mail 8 mutt
# screen -t daemon 9 tail -f /var/log/daemon.log

यह वह भाग है जहाँ आपको स्क्रिप्ट नाम को चलाने के लिए जोड़ना होगा और इससे आपको वह सब कुछ करना होगा जो आपको स्क्रीन से चाहिए।


किसी तरह यह कमांड ( screen -dmS ...) मेरे लिए काम नहीं करता है, भले ही यह वास्तव में होना चाहिए। मैं इसे चलाता हूं और तब screen -lsऔर कोई सॉकेट नहीं मिलता है। विचार?
bongbang

आप किस डिस्ट्रो का उपयोग कर रहे हैं?
रेकायो

NAME = "Ubuntu" संस्करण = "14.04.1 LTS, भरोसेमंद तहर" मुझे लगता है। यह एक वर्चुअल मशीन है।
बोंगबैंग

थोड़ा
शर्म

@bongbang - आपके पास स्क्रीन का कौन सा संस्करण है?
SLM

3

यह थोड़ा पुराना है लेकिन कुछ धागों में से एक जो मुझे ऐसा करने के लिए मिल सकता है। मरने के बाद एकमात्र तरीका यह ubuntu 14. के साथ अलग मोड में चल रहा है

screen -d -m -t nameofwindow sh nameoflaunch.sh

यह प्रक्षेपण उस ऊपर का दूसरा भाग होगा जिसमें वर्तमान जावा कमांड और सर्वर संस्करण होंगे। मैं वनीला चलाता हूं।

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