将标准输出重定向到程序参数

Joe*_*ley 1 linux bash command-line

我在 Arch Linux 笔记本电脑上运行 Minecraft 服务器。Minecraft 的服务器软件在命令行上作为交互式程序运行,因此我在分离的屏幕会话中启动它,允许我在每次需要访问它时重新附加。

为此,我使用了一个脚本(我其他时候不使用 screen,所以不用担心“grep SCREEN”)

#!/bin/bash

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

sudo screen -r $PID
Run Code Online (Sandbox Code Playgroud)

这将获得服务器正在运行的屏幕会话的 PID,然后重新附加到该屏幕。

现在我想知道,因为我在任何地方都找不到,是否可以使用单行来重定向输出

ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }'
Run Code Online (Sandbox Code Playgroud)

直接到 $argument 中

sudo screen -r $argument
Run Code Online (Sandbox Code Playgroud)

无需跨越 2 行

基本上我想将 awk 的标准输出重定向到屏幕的参数中,而不是作为屏幕的标准输入。

这似乎应该相对容易找到和执行,但是我在 Google 上很难找到有关它的任何信息。

任何帮助表示赞赏!谢谢

bar*_*lop 12

xargs 会这样做

$echo abc | xargs prog
Run Code Online (Sandbox Code Playgroud)

在上面, xargs 将使用 arg abc 即执行 prog $prog abc

另一个例子

$ echo abc | xargs echo w x
w x abc
Run Code Online (Sandbox Code Playgroud)


Dan*_*son 6

相反ps aux | grep SCREEN | sed -n 1p | awk '{ print $2; }',你可以做

ps aux | awk '/SCREEN/{print $2;exit}'
Run Code Online (Sandbox Code Playgroud)

或者,更推荐,如果你安装procps

pgrep SCREEN
Run Code Online (Sandbox Code Playgroud)

(按照说明将这些命令用反引号括起来,或者使用$()更易于阅读和嵌套的结构,并执行相同的操作。)

或者,推荐:如果您只运行一个 Screen 会话,只需:

screen -r
Run Code Online (Sandbox Code Playgroud)

默认情况下将附加到唯一的现有会话。


如评论中所述:如果您将来可能想运行多个 Screen 会话,请使用会话命名功能。启动一个命名会话

screen -S minecraft
Run Code Online (Sandbox Code Playgroud)

然后重新附加

screen -r minecraft
Run Code Online (Sandbox Code Playgroud)