cd -
は、現在のディレクトリと以前のディレクトリを切り替えることができます。
見たことがあるようです-
は以前は他のコマンドの引数として使用されていましたが、-
はcd
と同じことを意味します。
見つけた -
はls
では機能しません。
-
はCDでのみ使用されますか?
POSIXユーティリティ構文ガイドライン (特に#13)は、ファイル名の読み取りを想定しているユーティリティの場合、-
は標準入力を意味し、ファイル名の書き込みを想定しているユーティリティの場合は、 、-
は標準出力を意味します。たとえば、cat somefile -
はsomefile
の内容を標準出力にコピーし、その後に標準入力で読み取った内容をコピーします。
このガイドラインは、ファイルの読み取りまたは書き込みを行わないため、cd
コマンドには適用されません。 cd
は何か別のことを行います。引数-
は「前のディレクトリ」を意味します。コマンドcd -
はcd "$OLDPWD" && pwd
と同等です。この動作は、cd
コマンド、およびpushd
などの直接インスパイアされたコマンドに固有です。
-
はオペランドではなく、オプションであることに注意してください。 -
で始まり、-
または--
だけではない引数のみがオプションです。オペランドであることの主な意味は、--
がその特別な意味に影響を与えないことです。たとえば、cd -- -P
は-P
というサブディレクトリに変更されますが、cd -- -
はcd -
と同じであり、-
というディレクトリには変更されません。同様に、cat -- -
は-
というファイルからは読み取れませんが、標準入力から読み取ります。
-
は 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
はこれらのユーティリティに属していないため、-
in 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.
cd -
は、実際にはcd "$OLDPWD" && pwd
の省略形です。ここで、$OLDPWD
は、ディレクトリを現在のディレクトリに変更するたびに設定されます。
-
の処理は、アプリケーションによって異なります。一部のアプリケーションは-
を使用してSTDIN
を示します。 grep
、awk
他のアプリケーションは、マイケルの回答が指定するように、su
を使用して、-
を-
の省略形として、--login
を選択するものの省略形として使用できます。
マイケルはsu
および他のアプリケーションが-
は、彼らが望むものを意味します(stdinから読み取るのが一般的です)Gitは-
は、ブランチを変更する場合のcd
と同様の方法でです。
$ git status
On branch master
$ git checkout foobar
$ git status
On branch foobar
$ git checkout -
$ git status
On branch master
どのプログラムでも、-
を引数として使用して、好きなことを意味できます。一般的な例の1つはsu
で、-
の省略形として--login
を使用します。私が考えることができる唯一の規則は、ファイルから読み取るプログラムが頻繁に-
を使用して "read from stdin" を意味することですが、それは完全にプログラム次第です
gnouc で回答されているように、cd
では-
が独自の意味を持っています。
ただし、-
を使用すると、他のプログラムで~-
の動作を複製できます。例えば:
cd /etc
cd /
ls ~- #lists the contents of the /etc directory
vim ~-/fstab #opens the file /etc/fstab in vim
ここに2セントを追加します。私は「-」を使用してps2pdfツールに標準入力から読み取るように指示しています。
man -t ls | ps2pdf - ls.pdf
上記のワンライナーは、現在のディレクトリにlsのマニュアルページのPDFバージョンを作成します。
誰かがそれが便利だと思ってほしい:).