It's possible edit a command in standard editor
但我没有找到如何编辑命令的OUTPUT并在命令行中执行它。 例如,如果我输入:
翻拍
我获得:
El programa«翻拍»没有estáinstalado。 Puede instalarlo escribiendo: sudo apt-get install翻拍
我喜欢删除第一行,然后执行第二行。
这是特例,因为输出是从stderr而不是stout。
但在其他情况下,有用的是编辑输出,添加命令并执行它。
答案 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命令行。