如何编辑命令输出并执行它?

时间:2016-04-29 08:49:10

标签: linux shell command-line terminal text-editor

It's possible edit a command in standard editor

但我没有找到如何编辑命令的OUTPUT并在命令行中执行它。 例如,如果我输入:

  

翻拍

我获得:

  

El programa«翻拍»没有estáinstalado。 Puede instalarlo escribiendo:   sudo apt-get install翻拍

我喜欢删除第一行,然后执行第二行。

这是特例,因为输出是从stderr而不是stout。

但在其他情况下,有用的是编辑输出,添加命令并执行它。

3 个答案:

答案 0 :(得分:0)

您可以使用grep

我会这样做:

remake 2>&1 >/dev/null | grep -v -l -i "El programa «remake» no está in stalado."

或者只是这个:

remake 2>&1 >/dev/null | grep -l -i "Puede instalarlo escribiendo: sudo apt-get install remake"

|是一个管道,它将命令输出发送到grep(然后过滤输出)并打印stdout。

在这种情况下,我们将stderr(2)输入重定向到stdout(& 1)到/dev/null,然后我们用grep过滤它。

答案 1 :(得分:0)

我认为一旦你得到输出,就太晚了 - 输出没有存储在任何地方。 如果您知道您的命令会发出错误,您可以这样做:

`remake 2>&1 | sed -n '2 p'`

将执行第二行错误输出(即sudo apt-get install重制)。

说明:

remake
2>&1 : redirects stderr to stdout
| sed -n '2 p' : only print the second line
backquotes (``) : executes the command

但这意味着你知道你的程序没有安装,所以最好直接写:

sudo apt-get install remake

我宁愿尝试拦截“未安装的程序,安装它”行为,以便询问“安装它[y / n]”。

但也许你不知道一个简单的伎俩:你可以复制&只需使用鼠标选择命令部分(sudo apt-get install ...),然后单击右键或中键(根据您使用的终端仿真器),粘贴命令。

答案 2 :(得分:0)

看到你的评论,答案取决于你想要对你的输出做些什么。

首先,你必须保存输出;

广泛地说,您可以将其保存在vi:

中打开的临时文件中
TMPFILE=`mktemp`
my-command > $TMPFILE
vi $TMPFILE
// do whatever you want with $TMPFILE :
// source $TMPFILE // to execute it

可以存储为函数

function editrun() {
    TMPFILE=`mktemp`
    "$@" > $TMPFILE 2>&1 # run the command, redirects stdout to $TMPFILE, and also stderr
    vi $TMPFILE
    source $TMPFILE
}

然后你可以打电话

editrun my shell command with arguments

例如:

editrun echo ls -al

要获取并运行命令行,我使用了“$ @”。这几乎适用于任何情况;但是,应该可以使用一些特殊的bash变量来获取完整的bash命令行。