`-`はcdでのみ使用されますか?


45

cd - 現在のディレクトリと前のディレクトリを切り替えることができます。

私は-以前に他のコマンドの引数として使用されたことを見てきましたが-、と同じことを意味するかどうかは覚えていませんがcd

私はそれ-が動作しないことがわかりましたls

された- だけで、CDと一緒に使用?


8
覚えておくべきことcdは、外部コマンドではなく、組み込みコマンドであるということです(また、1つのコマンドとして機能する方法もありません)。cd -したがって、シェルレベルの機能です。
ふわふわ14

6
私はすべての時間を使用するgit checkout -前のブランチにスイッチへ
WIM

@fluffy:-他のビルトインでも同じように使用されますか?
ティム14

のようなディレクトリ処理ビルトインの一部についてはpushd、はい。それ以外の場合、「前のディレクトリ」の意味は非常に便利なデフォルトではありません。
ふわふわ14

1
おそらく、bashの「〜-」機能($ OLDPWDとして解釈される)を考えているのでしょう。これは、説明した方法で「ls」で使用できます。
abonet

回答:


22

POSIXユーティリティの構文ガイドライン(特に#13)は、ファイル名は、から読み取ることを期待ユーティリティのためにそれを指定し-、標準入力手段と、への書き込みに、ファイル名を期待するユーティリティのため-の手段の標準出力。たとえばcat somefile -、コンテンツをsomefile標準出力にコピーし、その後に標準入力で読み取る内容をコピーします。

このガイドラインはcd、ファイルの読み取りまたは書き込みを行わないため、コマンドには適用されません。cd何か違うことをします:引数-は「前のディレクトリ」を意味します。コマンドcd -はと同等cd "$OLDPWD" && pwdです。この動作は、cdコマンド、およびなどの直接インスピレーションを受けたコマンドに固有pushdです。

-はオペランドであり、オプションではないことに注意してください。始まる引数のみ-だけではありません-か、--オプションです。オペランドであることの主な意味は、--その特別な意味に影響しないということです。たとえば、cd -- -Pという名前のサブディレクトリに変更し-Pますが、cd -- -同じであるcd -、それはと呼ばれるディレクトリに変更されません-。同様に、cat -- -呼び出されるファイルからではなく-、標準入力から読み取ります。


46

-POSIXユーティリティ構文ガイドラインで標準入力として定義されています:

Guideline 13:
For utilities that use operands to represent files to be opened for either 
reading or writing, the '-' operand should be used to mean only standard input 
(or standard output when it is clear from context that an output file is being 
specified) or a file named -.

読み取りまたは書き込み用のファイルを操作するユーティリティのこの定義を見ることができます。cdこれらのユーティリティには属していないため-、cdではこのガイドラインに従っていません。

その上、POSIXもcdで-独自の意味を持っています:

-
    When a <hyphen> is used as the operand, this shall be equivalent to the 
    command:

    cd "$OLDPWD" && pwd

    which changes to the previous working directory and then writes its name.

36

cd -はの略記でありcd "$OLDPWD" && pwd、ここで$OLDPWDディレクトリを変更したたびに設定されたディレクトリに設定されます

の処理は-アプリケーションによって異なります。一部のアプリケーションでは、使用-を意味しSTDIN、例えばgrepawk

他のアプリケーションが使用すること-で、マイケルの答えが指定するとして、彼らが選ぶ何の省略形としてsu-の省略形です--login


はい、確かにそのためのルールはありません。
Kiwy 14

2
@Kiwy:POSIXには、そのためのルールがあります。私の答えをご覧ください。
クオンルム14

正確には、一般的なルールがありますが、多くの例外があります。また、ルールより前のコマンドや、ルールに適合するように更新されていない古い実装も多数あります。
バーマー14

19

マイケルがいることを言及しているもののsu、他のアプリケーションを使用することができますし、-彼らが望むものは何でも意味する、(STDINが一般的ですから読み取る)Gitは使用しない-方法と同様の方法でcd行い支店を変更するため、。

$ git status
On branch master

$ git checkout foobar
$ git status
On branch foobar

$ git checkout -
$ git status
On branch master

18

どんなプログラムで-も、望むものを意味する引数として使用できます。1つの一般的な例はsu、の-省略形として使用し--loginます。私が考えることができる唯一の規則は、ファイルから読み取るプログラムが「標準入力から読み取る」-という意味で頻繁に使用するということですが、それは完全にプログラム次第です


引数として特殊記号を使用するための標準または非標準の規則はありますか?
ティム14

2

ここに2セントを追加します。いくつかの人が以前に提案したように、「-」を使用してps2pdfツールに標準入力から読み取るように指示します。

man -t ls | ps2pdf - ls.pdf

上記のワンライナーは、現在のディレクトリにlsのmanページのPDFバージョンを作成します。
誰かがそれを便利だと思うことを願っています:)。


2

gnoucが回答したように、に-は独自の意味がありcdます。

ただし、を-使用して他のプログラムの動作を複製できます~-。例えば:

cd /etc
cd /
ls ~-             #lists the contents of the /etc directory
vim ~-/fstab      #opens the file /etc/fstab in vim
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.