如何在bash函数中使用pbcopy?可以编写脚本吗?

JP *_*Lew 11 macos bash terminal pbcopy .bash-profile

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

echo !123 | pbcopy

终端可以正常工作.假设!123 = cd ..它看起来像这样:

$ echo !123 | pbcopy
echo cd .. | pbcopy
    //result: `cd ..` is in the clipboard
Run Code Online (Sandbox Code Playgroud)

为了让生活更轻松,我将这个bash函数添加到我的.bashrc中:

function pb() {
    echo $1 | pbcopy
}
Run Code Online (Sandbox Code Playgroud)

理想情况下,将调用此命令,如下所示:pb !!.但是,这不起作用.这是发生的事情:

$ pb !123
pb cd .. | pbcopy
    //result: `!!` is in the clipboard
Run Code Online (Sandbox Code Playgroud)

无论我调用什么历史命令,它总是返回!!到剪贴板.我也试过制作别名,但是它有同样的问题:

alias pb='echo !! | pbcopy'

有什么指针吗?

Sam*_*een 12

你的功能有点不对劲.它应该使用$@而不是$1

那是

function pb() {
    echo "$@" | pbcopy
}
Run Code Online (Sandbox Code Playgroud)

结果:

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 $
Run Code Online (Sandbox Code Playgroud)

为了解释为什么alias不起作用,它!!是在单引号内,如果!!没有引用则发生历史替换.因为它是命令历史的替代品,根据定义是交互式的,将其保存为变量和别名非常棘手.