4

我正在尝试创建一个鱼壳函数,该函数将从输入中修剪新行,然后将输入复制到剪贴板。

我怎样才能编写这个函数以便它会;

  • 处理管道输入(现在可以使用)
  • 处理第一个参数,就好像它是通过管道输入到函数一样
  • 在没有通过参数或管道提供值的情况下立即退出,如果没有在管道中传递一些值,现在tr不会退出

代码:

function copy --description 'Trim new lines and copy to clipboard'
    tr -d '\n' | pbcopy
end
4

1 回答 1

2

更好地处理换行符的更新:

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...)
于 2013-05-22T20:06:49.113 回答