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

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

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

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

1 ответ1

1

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

screen -S test "python3 test.py"

Если вы используете этот метод, обратите внимание, что команда (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" .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .