首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在bash函数中使用pbcopy?它能被脚本化吗?

如何在bash函数中使用pbcopy?它能被脚本化吗?
EN

Stack Overflow用户
提问于 2013-06-13 13:23:13
回答 2查看 14.5K关注 0票数 11

我经常发现自己使用以下命令将历史记录命令复制到剪贴板:

echo !123 | pbcopy

这在终端上运行良好。假设使用!123 = cd ..,则如下所示:

代码语言:javascript
复制
$ echo !123 | pbcopy
echo cd .. | pbcopy
    //result: `cd ..` is in the clipboard

为了方便起见,我在我的.bashrc中添加了这个bash函数:

代码语言:javascript
复制
function pb() {
    echo $1 | pbcopy
}

理想情况下,应该像这样调用这个命令:pb !!。然而,这不起作用。下面是发生的情况:

代码语言:javascript
复制
$ pb !123
pb cd .. | pbcopy
    //result: `!!` is in the clipboard

无论我调用什么历史命令,它总是将!!返回到剪贴板。我也试着做了一个别名,但也有同样的问题:

alias pb='echo !! | pbcopy'

有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-13 16:56:56

你的函数有些错误。它应该使用$@而不是$1

那是

代码语言:javascript
复制
function pb() {
    echo "$@" | pbcopy
}

结果是:

代码语言:javascript
复制
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不工作的原因,!!放在单引号中,如果没有用!!引起来,就会发生历史替换。由于它是命令历史记录的替换,根据定义,命令历史记录是交互式的,因此将其保存到变量和别名中是非常棘手的。

票数 12
EN

Stack Overflow用户

发布于 2013-06-13 21:24:40

您还可以使用fc -l -1history -p '!!'打印最后一个历史记录条目:

代码语言:javascript
复制
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的值。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17079749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档