xterm не запускает сценарий оболочки

поэтому я пытаюсь использовать эту команду:

export DISPLAY=:1; /usr/bin/xterm -hold -e /path/to/shscript

Где shscript:

#!/bin/bash
echo "Restarting ...     $(date)" >> /var/log/mw2.txt
if screen -ls | grep -q 'test'; then
    screen -X -S test quit
    sleep 1000
    screen -d -m -S test wine iw4m.exe -dedicated -console +dw_licensefile license.dat +set net_port "28960" +set party_maxplayers 18 +exec server.cfg +map_rotate +set fs_game "mods/tsd"
else
    screen -d -m -S test wine iw4m.exe -dedicated -console +dw_licensefile license.dat +set net_port "28960" +set party_maxplayers 18 +exec server.cfg +map_rotate +set fs_game "mods/tsd"
fi

Итак, я хочу запустить новое окно xterm и запустить сценарий оболочки. Но какой бы сценарий оболочки я ни пытался использовать, он его не запускает. Он просто становится пустым. Все остальные команды работают, но когда я помещаю в нее сценарий оболочки, он просто становится пустым и ничего не делает. Я не могу найти решение для этого, пожалуйста, помогите, спасибо.

Я получаю это с set -x:

++ date
+ echo 'Restarting ... (date)'
+ grep -q test
+ screen -ls
+ screen -d -m -S test -wine iw4m etc...

person Wlnt    schedule 22.11.2015    source источник
comment
Этот скрипт помечен как исполняемый? Есть ли в нем правильная линия shebang (#!)? Что содержит внешний вид сценария?   -  person Etan Reisner    schedule 22.11.2015
comment
Извините, здесь формат лучше: pastebin.com/62b3EFG6   -  person Wlnt    schedule 22.11.2015
comment
Было бы лучше отредактировать это в сообщении (в целях форматирования). Видите ли вы что-нибудь в этом файле журнала, когда запускаете его? Добавьте set -x в начало скрипта и посмотрите, не выводятся ли какие-либо дополнительные сведения о том, что выполняется. Можно ли таким образом заставить любой скрипт работать правильно? Даже простой, который работает только echo Hello?   -  person Etan Reisner    schedule 22.11.2015
comment
Да, этот простой скрипт, по-видимому, работает... И ничего особенного в set -x В файле /var/log/mw2.txt не указано Перезапуск... $(дата). о_о   -  person Wlnt    schedule 22.11.2015
comment
Кроме того, при запуске restart.sh в VNC вручную он работает...   -  person Wlnt    schedule 22.11.2015
comment
Вы ничего не видите в окне xterm (или в текущем терминале), когда запускаете эту команду с set -x в сценарии? Вы должны увидеть каждую строку вывода сценария (с префиксом +).   -  person Etan Reisner    schedule 22.11.2015
comment
Да, я вижу эти линии. Но скрипт все еще не запускается.   -  person Wlnt    schedule 22.11.2015
comment
Вы видите какие строки? Вы видите, что он работает screen, grep и if? Вы видите, как он выполняет ваши screen команды? Вы видите, что он работает sleep? Что именно вы видите? (Вы можете просто отредактировать весь вывод в вопросе.)   -  person Etan Reisner    schedule 22.11.2015
comment
я отредактировал вопрос   -  person Wlnt    schedule 22.11.2015
comment
Итак, вы видите, что он запускает команду screen в блоке else? Но у вас не заканчивается сеанс screen? Похоже, у процесса wine возникла проблема, и он не работает (либо сам процесс, либо процесс iw4m). Вам нужно посмотреть, сможете ли вы получить один (или оба) из них, чтобы регистрировать дополнительную информацию о том, что происходит.   -  person Etan Reisner    schedule 22.11.2015
comment
да ... Но это работает, если я делаю это вручную в VNC. Как я могу получить такие журналы?...   -  person Wlnt    schedule 22.11.2015
comment
Является ли :1 правильным отображением? Он все еще установлен при запуске скрипта? Как вы выполняете команду xterm, которая не работает? Через крон?   -  person Etan Reisner    schedule 22.11.2015
comment
Дело в том, что он просто запускает команду экрана. Но это происходит, когда я запускаю скрипт вручную через VNC. Так в чем проблема?   -  person Wlnt    schedule 23.11.2015
comment
Он работает screen, вы видите это в выводе set -x. Это означает, что wine или iw4m каким-то образом дают сбой. Как это запускается, когда оно терпит неудачу? Через лаунчер? Через крон? Через что-то другое? Проверьте среду, когда она работает, а когда нет, и посмотрите, отличаются ли они. Перенаправьте стандартный вывод и стандартную ошибку из screenwine) в файл и посмотрите, видите ли вы там что-нибудь.   -  person Etan Reisner    schedule 23.11.2015


Ответы (2)


Я думаю, вы получите именно то, о чем просили...

Со страницы руководства экрана:

   -d -m   Start screen in "detached" mode. This creates a new session but
           doesn't  attach  to  it.  This  is  useful  for  system startup
           scripts.

С другой стороны, вы используете -hold для xterm:

   -hold   Turn  on  the  hold  resource, i.e., xterm will not immediately
           destroy its window when the shell command completes.   It  will
           wait  until you use the window manager to destroy/kill the win‐
           dow, or if you use the menu entries that send a  signal,  e.g.,
           HUP or KILL.

И это именно то, что вы видите. xterm запускается, выполняет экран, который запускается, но вы не видите вывод, так как экран не подключается к виртуальному терминалу. Поскольку screen отсоединился, сценарий оболочки завершает работу, а xterm удерживает окно, чтобы вы могли его уничтожить на досуге.

Бьюсь об заклад, что если в другом xterm вы подключитесь к сеансу с screen -S test, вы увидите результат.

person LaszloLadanyi    schedule 22.11.2015
comment
@Wlnt Это не совсем то, что было сказано. Дело в том, что вы ничего не видите в xterm, потому что вы запустили экран с отключенным экраном, но он фактически работал, и если бы вы подключились к какому-то другому терминалу, вы бы его увидели. Это то, что происходило? (Вы на самом деле не искали работающий screen процесс, вы просто предположили, что он не работает, потому что вы не видели никаких результатов?) - person Etan Reisner; 23.11.2015
comment
Неважно. я не работаю. Скрипт все еще работает, когда я запускаю его вручную. Суть не в том, что он пустой, а в том, что он не запускает игровой сервер. Я имею в виду, что он должен запускать винный файл iw4m.exe и т. Д. И это не так. Так что это до сих пор не решено. - person Wlnt; 23.11.2015
comment
Это * .. ой трудно печатать на мобильном телефоне. - person Wlnt; 23.11.2015

Ага. Это была ошибка команды wine. Кое-что поменял, теперь работает. Мне пришлось поместить cd /home/MW2 в сценарий, чтобы он мог запустить iw4m.exe, затем экран -S и т. д.

person Wlnt    schedule 23.11.2015