実験用に作成した-
という名前のディレクトリにcd
を挿入しようとしました。 Bashからはできませんでした。どうすればそれにcdできますか?
Ubuntu 13.10のNautilusを使用すると、これを簡単に行うことができ、その中にファイルを簡単に作成することもできました。私はグーグル検索をしました ここ は私が得たものです。これは、ディレクトリがbeginで-
のように-test
のように含まれる場合をカバーしますが、名前全体が1つの場合はカバーしません。シングル-
。 Nautilusから削除できましたが、rm
でも機能しません。
cat test.txt >-
はテキストをtest.txt
から-
という名前のファイルにコピーしますが、cat - >test2.txt
は通常の状況で行うこと、つまりstdin
からの入力をコピーします。ファイルtest2.txt
からではなく、-
に。
なぜノーチラスはこれに問題がないのにbashは問題があるのですか?
使用する:
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 の仕様を調べて、この動作がどこで定義されているかを確認してください。