web-dev-qa-db-ja.com

なぜpwdとechoの配管が機能しないのですか?

私はUNIXを初めて使用します。私はubuntuターミナルでこのコマンドを入力しました:

pwd | echo

Terminal(/home/fatemeh/Documents/Code/test)にpwdの出力が表示されることを期待していましたが、出力は1行の空行でした。 。

なぜこれが起こるのですか?

2
Fatemeh Karimi

echoは標準入力では何もしません。パラメータを解析するだけです。したがって、echoを効果的に実行しているので、それ自体で1つの空の行が出力され、標準入力は破棄されます。

実装しようとしている動作を確認したい場合は、catなどの標準入力を解析するように設計されたツールを使用してください。

$ pwd | cat
/home/username

本当にechoを使用して現在の作業ディレクトリ(または別のコマンドの出力)を表示したい場合は、コマンド置換を使用してこれを行うことができます。

$ echo "Your Shell is currently working in '$(pwd)'."
Your Shell is currently working in '/home/username'.
5
DopeGhoti

他の回答で述べられているように、echoはstdinから読み取らないため、pwdの出力を出力しません。まだわからない場合に備えて、pwdはそれ自体で出力を出力するため、目的の結果を得るには、単独で実行する必要があります。

$ pwd
/current/working/dir

これに本当にechoを使用したい場合は、 コマンド置換 を使用できます。これにより、コマンドの出力(pwd)がパラメーターとしてechoに渡されます。この例でも、pwdは独自の...出力をstdoutに出力するため、これは必要ありません。

$ echo "$(pwd)"
/current/working/dir
3
jesse_b

echoコマンドは標準入力から読み取るのではなく、書き込むように指示した内容を書き込みます。この場合、何も書くように指示しなかったので、印刷されたのは改行だけでした。 pwd | echoは、echoを実行するのと同じです。

パイプを使用する場合は、標準入力から読み取るコマンドを使用する必要があります(例:cat):

$ pwd | cat
/path/to/current/directory
$ 
1
Andy Dalton