パイプ読み取りコマンド?

パイプ読み取りコマンド?

特殊文字を含む文字列(たとえば、HG@eg3,l'{TT\"C!他のコマンド(termuxクリップボードセット)とread手順。一時変数(たとえば)を作成し、それを別のコマンド(たとえば)に渡すようにread設計されているようです。read temptermux-clipboard-set $temp

パイプを使用してこれを行うより高速な方法があるかどうか疑問に思います。たとえば、次のようになりますread | termux-clipboard-set

更新:申し訳ありません。 bash(termux)で実行されるものを探していることに言及するのを忘れました。

答え1

の場合、bashプログラムreadではありません。read内蔵されています。単純化した後、入力を読み込みread変数stdinに割り当てます。組み込みread関数は出力を生成しないため、stdoutパイプを試してもstdout結果は生成されません。

問題は理由です。manページ表示によると、

使用法termux-clipboard-set [text]

標準入力またはコマンドライン引数からテキストを読み込みます。

でテキストを読むと、stdin何かを前に置くのはなぜですか?もちろんできますが、ちょうどcat | termux-clipboard-setやっtermux-clipboard-setてください。

答え2

choオプションはzshデフォルトでサポートされています。read-ee

termux-clipboard-set "$(IFS= read -re)"

システムにまだlineコマンドがあり(まだ1つしかありませんが、util-linux最近は一般的には含まれていません)、POSIXに似たシェルを使用している場合:

termux-clipboard-set "$(line)"

このlineコマンドは、次のようにsh関数で作成できます。

line() (
  IFS= read -r line; ret=$?
  printf '%s\n' "$line"
  exit "$ret"
)

head -n 1端末から読まないときを除いて、同様の操作を行います。ほとんどの実装では、1行だけ出力しても入力から1行以上を読み取ることができます。readそしてそうでないことが保証されます(ただし、オプションを使用する必要がありlineますが)。-rread

端末からの入力で、

termux-clipboard-set "$(head -n1)"

しかし、動作するはずです。ほとんどのhead実装はまだ使用されていない(しかしより短い)バージョンをサポートしていますhead -1

tcshの場合は次のようになります。

termux-clipboard-set $<:q

1 また、端末装置からチャンクとして読み取られますが、モードの端末装置read()icanon1行以上を返しません。

関連情報