Скрипт Bash: создайте сеанс экрана и выполните в нем команду

3542
phyyyl

Я хочу написать файл bash, который запускает сеанс экрана и выполняет команду внутри.

Проблема в том, что он сначала создает сеанс, а когда вы вручную выходите из сеанса, он выполняет следующую команду. Есть ли способ выполнить команду внутри сеанса?

Это мой код до сих пор:

#!/bin/bash screen -S test python3 test.py 
0

1 ответ на вопрос

1
djsmiley2k

Вы должны передать команду для запуска в сеансе экрана. Вы можете сделать это, передав команду напрямую или вызвав скрипт, который запускает любую команду, которую вы хотели.

screen -S test "python3 test.py" 

Если вы используете этот метод, обратите внимание, что command ( python) и передаваемый ему аргумент ( test.py) находятся внутри речевых меток «..» - это может усложниться, если вы передаете аргументы, которые требуют специально отформатированных речевых меток, и это может быть, проще использовать метод ниже.

screen -S test /home/user/test.sh 

где test.sh находится в / home / user /, является исполняемым ( chmod +x ./test.py) и содержит:

#!/bin/sh python3 test.py 

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

Вы можете запустить несколько команд одновременно, используя фоновую задачу:

#!/bin/sh # All 3 will run at the same time python3 test.py & python3 test1.py & python3 test2.py & 

Некоторые дополнительные хитрые приемы можно найти в аналогичном вопросе по SF, и последнее, на что следует обратить внимание, это то, что при ВСЕХ этих методах сам сеанс экрана закрывается после выхода из программы / скрипта. Если вы не хотите, чтобы это делалось, вы хотите посмотреть на выполнение сеанса bash, который вызывает скрипт, а затем возвращается к сеансу bash - вот так screen -S test "someCommand; bash".