我正在尝试创建一个鱼壳函数,该函数将从输入中修剪新行,然后将输入复制到剪贴板。
我怎样才能编写这个函数以便它会;
- 处理管道输入(现在可以使用)
- 处理第一个参数,就好像它是通过管道输入到函数一样
- 在没有通过参数或管道提供值的情况下立即退出,如果没有在管道中传递一些值,现在
tr
不会退出
代码:
function copy --description 'Trim new lines and copy to clipboard'
tr -d '\n' | pbcopy
end
我正在尝试创建一个鱼壳函数,该函数将从输入中修剪新行,然后将输入复制到剪贴板。
我怎样才能编写这个函数以便它会;
tr
不会退出代码:
function copy --description 'Trim new lines and copy to clipboard'
tr -d '\n' | pbcopy
end
更好地处理换行符的更新:
function copy --description 'Trim new lines and copy to clipboard'
cat $argv ^/dev/null | while read -l line
set argv $argv $line
end
test -z "$argv"; and return
for i in $argv
echo -n $i
end | tr -d '\n' | pbcopy
end
这是一个相当大的挑战,但有一点点诡计是可能的。此功能如您所描述的那样工作,还有一个警告,如果您在copy
没有任何参数的情况下编写,那么它将无限期地等待您的输入。
如果您不关心多行复制,您可以删除| tr -d '\n'
之前的read
然后copy
也可以工作。因为 read 被换行符终止。所以它会自动接受到第一个换行符,例如copy\nme
只复制copy
.
代码:
function copy --description 'Trim new lines and copy to clipboard'
cat $argv ^/dev/null | tr -d '\n' | read -l input
set -ql input; or set -l input $argv
if test -n "$input"
echo $input | tr -d '\n' | pbcopy
end
end
例子:
➤ echo copy\nme | copy
Clipboard: copyme
➤ copy copy\nyou
Clipboard: copyyou
➤ echo | copy
Clipboard: copyyou
➤ copy
(Waiting for command indefinitely...)