[英]Bash: echo & copy result
我只是在尝试制作一个函数,该函数回显并将传递给它的内容复制到剪贴板:
function c() {
echo "$@"
pbcopy "$@"
}
c 123
回显正确,但随后等待输入
pwd | c
pwd | c
复制到剪贴板但不回显
基于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
拆分管道,将stdout发送到文件,但也将其保留在stdout中。
>(command)
打开一个文件描述符,该文件描述符通过管道传递给command
将两者结合起来可以让我们将参数回显到stdout,同时还将它们传递给pbcopy
此解决方案的一个警告是剪贴板将包含换行符,因为默认情况下echo会在输出中添加换行符。 通过将-n
标志传递给echo可以防止这种情况。
这是一个检查是否提供参数并从stdin读取输入的函数:
c() {
if (( $# )); then
printf '%s\n' "$*"
printf '%s' "$*" | pbcopy
else
tee >(pbcopy)
fi
return 0
}
那里有些麻烦的double printf
可以避免换行进入剪贴板。 但是,对于从stdin读取的情况,如果您将其换行,则剪贴板中将具有该换行符:
$ c blah
blah
$ pbpaste
blah$ echo blah | c
blah
$ pbpaste
blah
$ printf blah | c
blah$ pbpaste
blah$
其中$
是命令提示符,如果输出不包含换行符,则直接在输出后面。 这可能不是您想要的:我发现如果我将字符串作为参数提供,我希望换行符不会出现在字符串中,并且如果我从标准输入中读取,如果有的话,我会将换行符留在那里一。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.