
Ejecuto un servidor de Minecraft en mi computadora portátil Arch Linux. El software del servidor para Minecraft se ejecuta como un programa interactivo en una línea de comando, por lo que lo inicio en una sesión de pantalla separada, lo que me permite volver a conectarlo cada vez que necesito acceder a él.
Para hacer esto utilicé un script (no uso screen en ningún otro momento, así que no te preocupes por "grep SCREEN")
#!/bin/bash
PID=ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
sudo screen -r $PID
Esto obtendrá el PID de la sesión de pantalla en la que se está ejecutando el servidor y luego lo volverá a conectar a esa pantalla.
Ahora me pregunto, como no puedo encontrar esto en ninguna parte, si puedo usar una sola línea para redirigir la salida de
ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
directamente a $argumento en
sudo screen -r $argument
sin necesidad de abarcar 2 líneas
Básicamente quiero redirigir la salida estándar de awk a unargumentode pantalla, en lugar de como la entrada estándar de la pantalla.
Parece que debería ser relativamente fácil de encontrar y hacer, pero tengo muchos problemas para encontrar algo al respecto en Google.
¡Cualquier ayuda es apreciada! Gracias
Respuesta1
En lugar de ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
, podrías simplemente hacer
ps aux | awk '/SCREEN/{print $2;exit}'
O, aún más recomendado, si instalas procps
:
pgrep SCREEN
(Envuelva estos comandos entre comillas invertidas como se explica, o use la $()
construcción que es más fácil de leer y anidar, y hace lo mismo).
O inclusomásRecomendado: si solo tienes una sesión de pantalla en ejecución, simplemente:
screen -r
se adjuntará de forma predeterminada a la única sesión existente.
Como se indica en un comentario: si quizás desee ejecutar varias sesiones de pantalla en el futuro, utilice la capacidad de nombrar sesiones. Iniciar una sesión con nombre con
screen -S minecraft
que luego se vuelve a unir con
screen -r minecraft
Respuesta2
xargs hará eso
$echo abc | xargs prog
En lo anterior, xargs ejecutará prog con arg abc, es decir $prog abc
Otro ejemplo
$ echo abc | xargs echo w x
w x abc
Respuesta3
Suponiendo que estás en bash, otra forma es usar comillas invertidas. AFAIK, las comillas invertidas se evalúan primero y el resultado se usa en el resto de la expresión.
sudo screen -r `ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'`
Creo que eso debería hacer lo que quieres.
Como señaló otro comentarista, xargs
también puedes usarlo, pero me gusta reservarlo para cosas con múltiples argumentos. Siento que las comillas invertidas son más limpias para lo que quieres lograr.