2016-09-21 5 views

答えて

1

ディレクトリを返すことの意味を完全にはわかりません。ここでzshが何をするのかについては、echo <(-)が手がかりを与えます。システムによっては、/dev/fd/12のようなものや、おそらく一時ファイルの名前が表示される可能性があります。

<(...)はzsh構造です。 Zshはサブシェルを作成し、パイプに向けられたコマンドstdoutを使ってサブシェルでコマンドを実行します。次に、使用しているオペレーティングシステムに応じて、パイプのもう一方の端を/dev/fdまたは/proc/self/fdに置き換えます。 -コマンドは、実際にはプリコマンド修飾子であり、単独では何もしません。だから何もしないことを終えた後、それは終わり、パイプの終わりに行く。 catはファイルの終わりを読み取り、順番に終了します。 cat <(echo hi)のようなものとどうなるか比較してください。

同様の形式=(...)は、一時ファイルの使用を強制します。これは、diffのようなコマンドでファイル内のランダムな位置を探す必要がある場合に便利です。最後に、>(...)が出力されます。これはパイプのようなビットです。

+0

はい、 'エコー<( - )' '/ procの/自己/ FD /を11 'に印刷されます、私のシステムでは$ OLDPWDを返します。私はそれが偶然であったのか、それとも期待できるのか疑問に思いました。 (1)返されたものが一時的に存在しないファイルハンドルではない理由、(2)$ OLDPWDを取得する一貫性がない理由を理解しています。 –

+1

'popd'や' cd -'のようなものに '-'をエイリアスさせてしまったと思います。 'pushd_silent'オプションが設定されていない限り、新しいディレクトリを表示します。しかし、 '<(...) 'のコマンドはサブシェルで実行されるため、ディレクトリの変更は親ディレクトリでは有効になりません。私はあなたがそこにいたことを知らなかったエイリアスを持っているなら、oh-my-zshのようなプラグインフレームワークを使っています。 – okapi

+0

ああ、それです! zshの 'alias'は、' -'が実際に 'cd-'の短縮形であることを示しています。おそらく実際には 'oh-my-zsh'の(デフォルトの)プラグインによって導入されています。 –

1

-は、プリコマンド修飾子です。 man zshによると:

表現 cat <(-)
-  The command is executed with a `-' prepended to its argv[0] 
      string. 

、これは、それが-命名されたかのように実行されている(自動的に成功する出力なしで)ヌルコマンドに達する必要があります。私はどのように出力が古い作業ディレクトリに関連して取得しているかはわかりません。 cd -は、新しい作業ディレクトリ, but - doesn't trigger a directory change even with auto_cd enabled (and auto_cd shouldn't apply inside a process substitution anyway, since SHIN_STDIN`が設定されていません)を印刷します。

(謝罪;これは質問にコメントではなく、答えとしてより適切かもしれません。)

関連する問題