正确地表述这个问题并不容易,也许当我描述我想做的事情时它会有所帮助。
我想执行一个命令并将其输出导入到一个名为的工具中,pastebinit
该工具将 STDOUT 输出上传到 pastebin。
这很有效,但是我想在它上面发送命令本身,但不需要再次输入它。
是否有一些命令可以启动“我的命令”
- 在 STDOUT 上打印“我的命令”
- 执行“我的命令”
我感觉类似的事情存在,但尽管很难正确地提出这样的问题,但到目前为止我还无法用谷歌挖掘它。
答案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 文件中。(有关详细信息,请参阅脚本)