在 STDOUT 上重放命令的同时执行另一个命令的命令

在 STDOUT 上重放命令的同时执行另一个命令的命令

正确地表述这个问题并不容易,也许当我描述我想做的事情时它会有所帮助。

我想执行一个命令并将其输出导入到一个名为的工具中,pastebinit该工具将 STDOUT 输出上传到 pastebin。

这很有效,但是我想在它上面发送命令本身,但不需要再次输入它。

是否有一些命令可以启动“我的命令”

  1. 在 STDOUT 上打印“我的命令”
  2. 执行“我的命令”

我感觉类似的事情存在,但尽管很难正确地提出这样的问题,但到目前为止我还无法用谷歌挖掘它。

答案1

您可以轻松编写一个小的包装脚本来执行此操作:

#!/bin/bash

# Start a subshell
(

# Print the command to standard out
echo "Command: $@"
echo

# Run the command as well
$@

# End the subshell, and pipe all standard output from it to pastebinit
) | pastebinit

保存此文件并 chmod +x,然后使用您创建的脚本运行命令并 pastebinit。

例如:

./run_and_pastebin.sh ls -la /root

答案2

尝试命令tee。此命令从输入读取,然后写入标准输出和文件。

例子:
cat mytext.txt | tee pastebininit

这会将 mytext.txt 的文本发送到标准输出和命令pastebininit

答案3

运行 shell 命令的命令是sh(shell),可以使用开关要求将命令回显到 stderr -x。然后您可以将 stderr 重定向到 stdout。

$ sh -x -c "echo my command" 2>&1
+ echo my command
my command

此解决方案的副作用是命令(本例中为“echo my command”)stderr 也会发送到 stdout。这对您来说可能是也可能不是问题。此外,命令中还添加了“+”前缀。

'-x' 开关也适用于整个脚本,回显每个执行的 shell 命令。

答案4

你可以看看我在另一个类似问题下的回答:

https://serverfault.com/a/454535/146493

我编写了一个脚本,它可以显示和执行几乎“任何”命令(即,行的其余部分“按原样”执行,即使它包含管道、复杂参数、引号等。对于多行原样,这是不行的,但可以通过一些添加来实现,例如终止字符串(以知道要执行的命令在哪里结束),以及一个小的 awk 脚本,该脚本从 lineno 复制行直到终止字符串并将其放入要获取的 tmp 文件中。(有关详细信息,请参阅脚本)

相关内容