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

これはかなりの挑戦でしたが、ちょっとした工夫で可能になりました。この関数は、説明したとおりに機能し、さらに 1 つの注意点がありますcopy。引数を指定せずに記述すると、入力を無期限に待機します。

複数行のコピーを気にしない場合は、| tr -d '\n'beforereadを削除してからcopyも機能します。読み取りは改行で終了するためです。したがって、最初の改行まで自動的に受け入れられます。たとえばcopy\nmecopy.

コード:

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 に答える