这个问题很难正确地expression出来,或许当我描述我想要做的事情时,这可能会有所帮助。
我想执行一个命令并将其输出到一个名为pastebinit
的工具中,该工具将STDOUT输出上传到pastebin。
这工作得很好,但我想发送命令本身,但没有第二次打字。
有没有一些命令我可以启动“我的命令”的意志
我觉得像这样的东西存在,但如何正确地制定这样一个问题,我到目前为止还是无法用谷歌来挖掘它。
你可以轻松地写一个小的包装脚本来做到这一点:
#!/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文件来源(详见脚本)