readlinkなどの一部のプログラムがパイプから入力を受け取れないのはなぜですか?

readlinkなどの一部のプログラムがパイプから入力を受け取れないのはなぜですか?

$PATH編集したいファイルのスクリプトを指すシンボリックリンクがあります。ファイルパスを忘れて、次のことを試してみました。

$ which my_script_link | readlink

出力ファイルへのパスが予想されましたが出力されます。

> readlink: missing operand
> Try 'readlink --help' for more information

以前は、他の状況(編集用にファイルリストをvimにパイプするなど)でも同様の動作を見たことがあります。 subshel​​lのような回避策があることを知っていますが、readlink $(which my_script_link)理解したいと思います。なぜこの場合、パイプラインは私が想像したように動作しません。

ありがとうございます!

ベストアンサー1

簡単に言えば、これを行うようにプログラムが作成されていないからです。ソフトウェアがSTDINから読み取れるかどうか、または入力ファイルが必要かどうかを判断するのはプログラマーの役割です。この場合、readlinkそのmanページには次のように指定されています(強調表示)。

readlink - 印刷が解決されましたシンボリックリンクまたは規範的なファイル名

要約
読み取りリンク[オプション] ...文書...

通常、STDINから入力を受け取るプログラムは、どのような方法でもその入力を解析するように設計されています。データをパイプするとreadlinkテキストストリームを受け取りますが、コンテンツではないファイルのみを処理するため、どうすればよいかわかりません。lsまたはのcdようなプログラムも同じですcp。テキスト/データストリームを処理するプログラムだけがパイプの入力を受け入れることができます。

おすすめ記事