web-dev-qa-db-ja.com

「-」という名前のディレクトリにcdするにはどうすればよいですか?

実験用に作成した-という名前のディレクトリにcdを挿入しようとしました。 Bashからはできませんでした。どうすればそれにcdできますか?

Ubuntu 13.10のNautilusを使用すると、これを簡単に行うことができ、その中にファイルを簡単に作成することもできました。私はグーグル検索をしました ここ は私が得たものです。これは、ディレクトリがbegin-のように-testのように含まれる場合をカバーしますが、名前全体が1つの場合はカバーしません。シングル-。 Nautilusから削除できましたが、rmでも機能しません。

cat test.txt >-はテキストをtest.txtから-という名前のファイルにコピーしますが、cat - >test2.txtは通常の状況で行うこと、つまりstdinからの入力をコピーします。ファイルtest2.txtからではなく、-に。

なぜノーチラスはこれに問題がないのにbashは問題があるのですか?

7
Ankit Pati

使用する:

cd ./-

または:

cd /absolute/path/leading/to/-

または、より良い:

mv ./- something-sensible
cd something-sensible

単独のダッシュは、「標準入力」または「標準出力」を意味するために多くのコマンドで使用されます。いくつかのコマンドは、1つのダッシュを標準入力に、別のダッシュを1回のコマンド呼び出しで標準出力を意味するように説得できます。たとえば、GNU Tar、tar -cf - -T -はリストを読み取ります標準入力(-T -)からアーカイブするファイル名を入力し、tarファイルを標準出力(-f -)に書き込みます。このようなコマンドは、-という実ファイルがあるかどうかを確認しません。 ;名前を-と比較し、適切な標準I/Oストリームとして扱います。同じように問題を回避します。./-などの名前を使用してファイルを指定します。

また、名前--(二重ダッシュ)も問題を引き起こすことに気付くかもしれません。これは、次のように、二重ダッシュ引数がファイル名(非オプション)引数からオプションを分離するために使用されるためです。

rm -fr -- -

これにより、ファイルまたはディレクトリ-が削除されますが、ファイル(またはディレクトリ)--は変更されません。 POSIX tility Conventions の仕様を調べて、この動作がどこで定義されているかを確認してください。

15