我经常发现自己使用以下命令将历史记录命令复制到剪贴板:
echo !123 | pbcopy
这在终端上运行良好。假设使用!123 = cd ..,则如下所示:
$ echo !123 | pbcopy
echo cd .. | pbcopy
//result: `cd ..` is in the clipboard为了方便起见,我在我的.bashrc中添加了这个bash函数:
function pb() {
echo $1 | pbcopy
}理想情况下,应该像这样调用这个命令:pb !!。然而,这不起作用。下面是发生的情况:
$ pb !123
pb cd .. | pbcopy
//result: `!!` is in the clipboard无论我调用什么历史命令,它总是将!!返回到剪贴板。我也试着做了一个别名,但也有同样的问题:
alias pb='echo !! | pbcopy'
有什么建议吗?
发布于 2013-06-13 16:56:56
你的函数有些错误。它应该使用$@而不是$1
那是
function pb() {
echo "$@" | pbcopy
}结果是:
samveen@minime:/tmp $ function pb () { echo "$@" | pbcopy ; }
samveen@minime:/tmp $ pb !2030
pb file `which bzcat`
//result: `file /bin/bzcat` is in the clipboard
samveen@minime:/tmp $为了解释alias不工作的原因,!!放在单引号中,如果没有用!!引起来,就会发生历史替换。由于它是命令历史记录的替换,根据定义,命令历史记录是交互式的,因此将其保存到变量和别名中是非常棘手的。
发布于 2013-06-13 21:24:40
您还可以使用fc -l -1或history -p '!!'打印最后一个历史记录条目:
pb() {
[[ $# = 0 ]] && local n=-1 || local n="$1 $1"
fc -l $n | cut -d' ' -f2- | printf %s "$(cat)" | LC_CTYPE=UTF-8 pbcopy
}如果LC_CTYPE为C,则pbcopy会乱码。但是,在默认情况下,终端和iTerm将区域设置变量设置为类似en_US.UTF-8的值。
https://stackoverflow.com/questions/17079749
复制相似问题