将命令的输出编辑为新命令

将命令的输出编辑为新命令

我有一个脚本,它输出一个我想要编辑的字符串,然后作为命令运行。

例如,我正在使用

cat ... | xsel -p

然后我想编辑“xsel -op”的输出并将编辑后的字符串作为新命令运行。

所以我正在尝试:

cat ... | xsel -p
$(xsel -op) TAB

但这当然失败了。

那么如何将xsel -op(在本例中)的内容输出到命令行,编辑该新命令,然后运行该命令?

谢谢

答案1

zsh内置函数:

-z 将参数推入编辑缓冲区堆栈,以空格分隔。

要将 xsel 的内容输出到命令行:

print -z $(xsel -op)

答案2

您可以通过执行以下操作将其添加到历史记录中(至少在 bash 中,我不确定在 zsh 中)

history -s $(xsel -op)

然后检索并编辑它。

从那以后我发现

print -s $(xsel -op)

在 zsh 下同样有效

答案3

您无需手动将其添加到历史记录中,只需按 bash 的shell-expand-line键 ( M-C-e) 即可:

   shell-expand-line (M-C-e)
          Expand the line as the shell does.  This performs alias and his‐
          tory expansion as well as all of the shell word expansions.  See
          HISTORY EXPANSION below for a description of history expansion.

答案4

我不完全确定你想做什么,但这样的事情应该有效:

`xsel -op | sed 'do something'`

反引号将导致 BASH 执行,在本例中,无论您刚刚使用 sed 编辑过的 X 的主选择缓冲区中保存的内容。例如:

echo "find . -name foo" | xsel -p
`xsel -op | sed 's/foo/bar/`

上述命令将导致find运行搜索名为“bar”的文件或文件夹。

相关内容