我只是在尝试创建一个函数,该函数回显并将传递给它的内容复制到剪贴板:
full_list.add(new ArrayList<>(arr));
function c() {
echo "$@"
pbcopy "$@"
}
会正确回显,但仅等待输入
c 123
复制到剪贴板但不回显
答案 0 :(得分:1)
基于https://unix.stackexchange.com/questions/28503/how-can-i-send-stdout-to-multiple-commands
function c() {
echo "$@" | tee >(pbcopy)
}
应该做到这一点。我在zsh中进行了测试,但是我希望它也可以在bash中工作。
正如其他人在评论中指出的那样,pbcopy从stdin读取,它不会复制参数,这就是为什么管道vs参数测试具有结果的原因。
tee
拆分管道,将标准输出发送到文件,但也将其保留在标准输出中。
>(command)
打开一个文件描述符,该描述符通过管道传输到command
将两者结合起来,使我们可以将参数传回stdout,同时还将它们传递到pbcopy
此解决方案的一个警告是剪贴板将包含换行符,因为默认情况下echo会在输出中添加换行符。可以通过传递-n
标志进行回显来防止这种情况。
答案 1 :(得分:1)
这是一个检查是否提供参数并从stdin读取输入的函数:
c() {
if (( $# )); then
printf '%s\n' "$*"
printf '%s' "$*" | pbcopy
else
tee >(pbcopy)
fi
return 0
}
有些麻烦的双printf
可以避免换行符进入剪贴板。但是,对于从stdin读取的情况,如果您将其换行,则会在剪贴板中具有该换行符:
$ c blah
blah
$ pbpaste
blah$ echo blah | c
blah
$ pbpaste
blah
$ printf blah | c
blah$ pbpaste
blah$
其中$
是命令提示符,如果输出不包含换行符,则直接在输出后面。这可能不是您想要的:我发现如果我将字符串作为参数提供,我希望换行符不会出现在字符串中,并且如果我从标准输入中读取,如果有的话,我会将换行符留在那里一个。