我想快速键盘命令序列将当前命令在bash提示符下复制到剪贴板.
因此,例如,要将最后一个bash命令复制到剪贴板,我按下+ [some command sequence]
来复制它.或者,例如,要在bash中搜索命令,我会使用ctrl + r,搜索,在命令提示符下显示它,然后[some command sequence]
复制它等.
我目前的解决方案是使用bash管道:管道进出剪贴板
因此,要将上一个命令复制到剪贴板:
echo "!!" | pbcopy
Run Code Online (Sandbox Code Playgroud)
这不是太可怕,但如果要复制的命令不是最后一个命令,等等.
实现我想要实现的目标的正确方法是什么?
以@Lauri的帖子为灵感,这是使用bind命令的解决方案:
bind '"\C-]":"\C-e\C-u pbcopy <<"EOF"\n\C-y\nEOF\n"'
Run Code Online (Sandbox Code Playgroud)
ctrl-]然后将当前bash提示符中的任何内容复制到剪贴板.
要使其持久化,您可以将上面的bind命令添加到您的~/.bashrc
,或者您可以去掉外部引号并删除调用的"绑定"部分并将结果添加到您的~/.inputrc
.
非OS-X用户必须使用适当的命令(可能是xclip)交换pbcopy.
使用引用的heredoc而不是echo + pipe技术,以便保留bash提示符中命令中的单引号和双引号.通过这种技术,例如,我能够点击ctrl-],从终端提示符复制实际的绑定命令,并将其粘贴到答案中.因此,heredoc技术在这里处理bind命令中的所有特殊字符.
您可以使用READLINE_LINE
与bind -x
在bash 4:
copyline() { printf %s "$READLINE_LINE"|pbcopy; }
bind -x '"\C-xc":copyline'
Run Code Online (Sandbox Code Playgroud)
您可以通过运行来安装bash 4并使其成为默认的登录shell brew install bash;echo /usr/local/bin/bash|sudo tee -a /etc/shells;chsh -s /usr/local/bin/bash
.
我也使用这个函数来复制最后一个命令:
cl() { history -p '!!'|tr -d \\n|pbcopy; }
Run Code Online (Sandbox Code Playgroud)