命令在STDOUT上播放命令时执行另一个命令

这个问题很难正确地expression出来,或许当我描述我想要做的事情时,这可能会有所帮助。

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

这工作得很好,但我想发送命令本身,但没有第二次打字。

有没有一些命令我可以启动“我的命令”的意志

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

我觉得像这样的东西存在,但如何正确地制定这样一个问题,我到目前为止还是无法用谷歌来挖掘它。

你可以轻松地写一个小的包装脚本来做到这一点:

 #!/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它,然后使用你创build的脚本来运行命令和pastebinit。

例如:

 ./run_and_pastebin.sh ls -la /root 

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

例:
cat mytext.txt | tee pastebininit

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

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

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

这个解决scheme的副作用是命令(在本例中为'echo my command')stderr也被发送到stdout。 这可能是或可能不是你的问题。 另外“+”前缀被添加到命令中。

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

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

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

我在那里创build了一个脚本,可以显示和执行几乎“任意”的命令(即,即使它包括pipe道,复杂的参数,引号等,其余部分也是“按原样”执行的。是的,但可以通过一些附加的方法来实现,例如一个终止string(知道要执行的命令的结束位置),还有一个awk脚本,用于从lineno复制行,直到终止string,并将其放入tmp文件来源(详见脚本)