Запуск сценарію на екрані


25

Я хочу запустити скрипт bash на окремому екрані. Сценарій викликає програму кілька разів, кожен з яких потребує занадто багато часу, щоб чекати. Моя перша думка полягала в тому, щоб просто відкрити екран, а потім викликати сценарій, але, здається, я не можу відключитися (від ctrl-a d) під час виконання сценарію. Тому я провів кілька досліджень і знайшов цю інструкцію замінити шебанг наступним:

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

Але це також не працює (варіанти не розпізнаються). Будь-які пропозиції?

PS Мені зараз здається, що це screen -dmS name ./script.shмогло б працювати в моїх цілях, але мені все одно цікаво, як включити це в сценарій. Дякую.

Відповіді:


28

Лінія shebang, яку ви бачили, може працювати на деяких версіях unix, але не в Linux. Лінії Shebang Linux обмежені: у вас може бути лише один варіант. Весь рядок -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"тут?
Фабіч

4
@Lordofdark Це назва сценарію. Сценарій викликає, screenякий викликає, /bin/bashякий викликає сценарій знову.
Жиль "ТАК - перестань бути злим"

16

За екранами чоловічої сторінки:

  • screen -d -m Початковий екран у відокремленому режимі. Це створює новий сеанс, але не додається до нього. Це корисно для сценаріїв запуску системи.
  • -S sessionname Встановіть назву нового сеансу на ім'я сесії.

Тож коли я запустив команду, яку ви надали: screen -dmS name ./script.sh

Екран запускає вікно під назвою ім'я та автоматично запускає цей 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і розеток не знайдено. Думки?
Бонбанг

Який дистрибутив ви використовуєте?
ryekayo

NAME = "Ubuntu" VERSION = "14.04.1 LTS, Trusty Tahr" Я думаю. Це віртуальна машина.
Бонбанг

Дайте трохи, тому що я просто залишаю роботу і я намагаюся використовувати екран на моїй машині, який також є ubuntu 14.04
ryekayo

@bongbang - яка версія екрана у вас є?
slm

3

Це трохи старе, але одна з небагатьох ниток, яку я міг знайти для цього. Після гри Arount єдиним способом запустити цю роботу в окремому режимі з ubuntu 14. є

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

Запуск буде другою частиною вище, де розташовані поточні команди Java та версія сервера. Я запускаю ваніль.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.