来自上一个命令的 STDOUT 和 STDERR 作为下一个命令的参数
STDOUT & STDERR from previous Command as Arguments for next Command
不知何故,我找不到足够的答案来解决我的问题,只有部分 hackarounds。
我正在调用单个 "chained" shell 命令(来自 Node 应用程序),该命令启动一个长 运行ning 更新过程,它是 stdout/-err应该作为参数移交给 shell 命令的第二部分(另一个登录数据库的 Node 应用程序)。
我想做这样的事情:
updateCommand 2>$err 1>$out ; logDBCommand --log arg err out
- 不能使用
>
,因为它仅用于文件或文件描述符。
- 此外,如果我使用 shell 变量(如
error=$( { updateCommand | sed 's/Output/tmp/'; } 2>&1 ); logDBCommand --log arg \"${error}.\"
),我只能将标准输出或两者混合到一个参数中。
- 而且我不想通过管道传输,因为第二个命令 (logCommand) 应该 运行 无论第一个命令执行成功还是失败。
- 而且我不想缓存到文件,因为老实说这没有抓住要点并引入另一个异步错误向量
- 列表项
在 #!/bin/bash 中聊了一会儿之后,有人建议只使用 tpmsf(保存在 RAM 中的文件系统),这是第二个最优雅(但唯一可能)的方法。所以我可以使用 >
运算符,并在内存中的单独变量中包含 stdout
和 stderr
。
command1 >/dev/shm/c1stdout 2>/dev/shm/c1stderr
A=$(cat /dev/shm/c1sdtout)
B=$(cat /dev/shm/c1stderr)
command2 $A $B
(或更短):
A=$(command1 2>/dev/shm/c1stderr )
B=$(cat /dev/shm/c1stderr)
command2 $A $B
不知何故,我找不到足够的答案来解决我的问题,只有部分 hackarounds。
我正在调用单个 "chained" shell 命令(来自 Node 应用程序),该命令启动一个长 运行ning 更新过程,它是 stdout/-err应该作为参数移交给 shell 命令的第二部分(另一个登录数据库的 Node 应用程序)。
我想做这样的事情:
updateCommand 2>$err 1>$out ; logDBCommand --log arg err out
- 不能使用
>
,因为它仅用于文件或文件描述符。 - 此外,如果我使用 shell 变量(如
error=$( { updateCommand | sed 's/Output/tmp/'; } 2>&1 ); logDBCommand --log arg \"${error}.\"
),我只能将标准输出或两者混合到一个参数中。 - 而且我不想通过管道传输,因为第二个命令 (logCommand) 应该 运行 无论第一个命令执行成功还是失败。
- 而且我不想缓存到文件,因为老实说这没有抓住要点并引入另一个异步错误向量
- 列表项
在 #!/bin/bash 中聊了一会儿之后,有人建议只使用 tpmsf(保存在 RAM 中的文件系统),这是第二个最优雅(但唯一可能)的方法。所以我可以使用 >
运算符,并在内存中的单独变量中包含 stdout
和 stderr
。
command1 >/dev/shm/c1stdout 2>/dev/shm/c1stderr
A=$(cat /dev/shm/c1sdtout)
B=$(cat /dev/shm/c1stderr)
command2 $A $B
(或更短):
A=$(command1 2>/dev/shm/c1stderr )
B=$(cat /dev/shm/c1stderr)
command2 $A $B