我在 bash shell 上,我希望命令的输出直接出现在命令执行后出现的命令提示符中!
我设想的例子来说明我的想法:
locate create_tables.sql|MAGIC_command
user@localhost:~# /usr/share/doc/phpmyadmin/create_tables.sql
现在,使用这样的命令 dsubstitution
sudo $(locate create-tables.sql)
有效但是 立即执行输出,我希望能够之前对其进行编辑。有办法吗?
答案1
在 Emacs 模式下输入sudo $(locate create-tables.sql)
, Esc, Control+e
看shell-expand-line
Bash 参考手册:
像 shell 一样展开该行。这将执行别名和历史扩展以及所有 shell 单词扩展
答案2
我通常使用剪贴板来做这种事情
$ some_command | cb
$ cb_edit
$ `cb` #or paste it with your paste button/shortcut
魔术:
cb() {
if [ ! -t 0 ]; then
#if somebody's piping in reproduce input and pipe a copy to the clipboard
tee >(xclip -selection c)
else
#otherwise, print the contents of the clipboard
xclip -selection c -o
fi
}
cb_edit() { cb | vipe "$@" | cb; }
答案3
不是很优雅的解决方案是将输出存储到某个 tmpfile 中,编辑该文件,然后运行:
$ locate create_tables.sql > /tmp/tmpfile
$ vi !$ # last argument of last command
$ bash !$