1

Я использую сервер Minecraft на своем ноутбуке Arch Linux. Серверное программное обеспечение для Minecraft запускается в виде интерактивной программы в командной строке, поэтому я запускаю его в отдельном сеансе экрана, позволяя повторно подключать каждый раз, когда мне нужно получить к нему доступ.

Для этого я использовал скрипт (я не использую экран в любое другое время, поэтому не беспокойтесь о "grep SCREEN")

#!/bin/bash

PID=ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'

sudo screen -r $PID

Это позволит получить PID сеанса экрана, в котором работает сервер, и затем снова подключиться к этому экрану.

Теперь мне интересно, так как я нигде не могу найти это, могу ли я использовать однострочник для перенаправления вывода

ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'

непосредственно к аргументу $ в

sudo screen -r $argument

без необходимости занимать 2 строки

По сути, я хочу перенаправить стандартный вывод awk в аргумент экрана, а не в качестве стандартного экрана.

Кажется, что найти и сделать это должно быть относительно легко, но у меня много проблем с поиском чего-либо об этом в Google.

Любая помощь приветствуется! Спасибо

3 ответа3

12

Xargs сделает это

$echo abc | xargs prog

В приведенном выше примере xargs будет выполнять prog с arg abc, т.е. $prog abc

Другой пример

$ echo abc | xargs echo w x
w x abc
6

Вместо ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }' , вы могли бы просто сделать

ps aux | awk '/SCREEN/{print $2;exit}'

Или, что еще более рекомендуется, если вы устанавливаете procps:

pgrep SCREEN

(Оберните эти команды в кавычки, как объяснено, или используйте конструкцию $() которую легче читать и вкладывать, и она делает то же самое.)

Или, еще более рекомендуется: если у вас запущен только один сеанс экрана, просто:

screen -r

будет по умолчанию присоединяться к единственному существующему сеансу.


Как отмечено в комментарии: если вы хотите запустить несколько сеансов Screen в будущем, используйте возможность именования сеансов. Начать именованный сеанс с

screen -S minecraft

который затем присоединяется с

screen -r minecraft
4

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

sudo screen -r `ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'`

Я думаю, что должен делать то, что вы хотите.

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

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