ダウンロードしましたクラス私のWebサーバーに行って解凍しました。
というフォルダが含まれています-
。私はこの問題をどのように処理するかを知っていると思いましたが、そうではありませんでした。
試してみましたが、cd -- -
欲しい効果はありませんでした。引用符を使用しても影響しないようです。スラッシュをあちこちに入れましたが、うまくいきませんでした。
このフォルダを変更する正しい方法は何ですか?
答え1
パラメータになるのを防ぎたいので、パラメータの前に何かを追加してみましょう。現在のディレクトリはを使用してアクセスできるため、.
サブフォルダもを使用してアクセスできます。-
./-
cd ./-
cd -- -
うまくいかない理由は、比較すると実装が異なるためですrm
(参照man rm
)cd
確認するman bash
またはman cd
)はcd
異なる方法で解釈され、-
パラメータとして扱われます(参照:man bash
またはman cd
)。
cd
また、これは以下で使用できるシェル組み込み関数であることに注意する必要があります。この回答:
cd
外部コマンドではなく、シェル組み込み機能です。外部コマンドなど、ブランチ/実行コンテキストでは、別のプロセスではなく、現在のシェルのコンテキストで実行されます。
外部コマンドがありますが、cd
何かを行います。全く違う。
これは実装が異なる理由を説明します。吹くそしてコアツール2つが異なります。
あなたがこれを信じていないと仮定すると、これをどのように証明できますか?which
と を使用しますtype
。
$ which cd && type cd
which: no cd in (/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/x86_64-pc-linux-gnu/gcc-bin/4.7.2:/usr/games/bin
cd is a shell builtin
$ which rm && type rm
/bin/rm
/bin/rm is /bin/rm
答え2
マイナス記号(ダッシュとも呼ばれる)自体はオプションではなく、オペランド(つまりオプションの引数ではありません)です。したがって、--
前に置くことは何の効果もありません。ダッシュはのオペランドcd -
であってもオペランドとして保持されますcd -- -
。他の標準ユーティリティと同様に、cd
オペランドはオペランドの前にあるかどうかにかかわらず処理されます--
。
このcd
コマンドはオペランドに特別な意味を割り当てます-
。他のものは切り替えられるディレクトリです。オペランドとして特別ではなく、オプションとして扱われないため、cd -- -a
名前付きディレクトリに切り替えます。これは単一のケースでは機能せず、オプションでもありません。-a
-a
--
cd
-
とにかくオペランドは最終的に渡されるので、引用符を追加しても-
役に立ちません。-
したがって、唯一の方法は、同じアイデアを表現する別の方法、つまり同じディレクトリの別の名前を見つけることです。幸いにも簡単な方法があります。./
相対ファイル名を前に付けると、まだ同じファイルを意味します。これは./
違いをもたらし、これは私たちの場合には関係ありません。ディレクトリ名がCDPATH
、またはで始まる場合、相談は行われません。したがって:/
./
../
cd ./-
-
もう一つの方法はディレクトリなので、後に追加することです/
。/
ファイル名の末尾にaを追加すると、ファイルはディレクトリとして扱われます(特に、ファイルがディレクトリへのシンボリックリンクの場合、コマンドはシンボリックリンクではなくディレクトリ自体で機能します)。違い。したがって:
cd -- -/
-/
ちなみに、完成コードは提案どおりに書かれていますが、bashでは実際に--
以前の状況にのみ適用され、bashには特別なケースはありませんcd -/
(zshはそうです)。
答え3
パスを介した資格はオプションです。
cd ./-
答え4
次も動作します。
cd ~/'-'
または
cd ~/"-"