Webサーバーにlessnをダウンロードし、解凍しました。
という名前のフォルダーが含まれています-
。私はそれに対処する方法を知っていると思いましたが、私は知りません。
私は試しましたがcd -- -
、それは望ましい効果を持っていません。引用符を使用しても影響はないようです。私は、無駄をすべての場所にスラッシュを置きました。
このフォルダに変更する適切な方法は何ですか?
Webサーバーにlessnをダウンロードし、解凍しました。
という名前のフォルダーが含まれています-
。私はそれに対処する方法を知っていると思いましたが、私は知りません。
私は試しましたがcd -- -
、それは望ましい効果を持っていません。引用符を使用しても影響はないようです。私は、無駄をすべての場所にスラッシュを置きました。
このフォルダに変更する適切な方法は何ですか?
回答:
パラメータにならないようにしたいので、何かを追加しようとします。で現在のディレクトリにアクセスできる.
ため、-
代わりにサブフォルダにアクセスできます./-
。
cd ./-
理由cd -- -
あなたは比較すれば、これは異なる方法で実装されているため、仕事をしないですrm
(参照man rm
する)cd
(参照man bash
またはman cd
)、cd
見ているさまざまな解釈がある-
(参照パラメータとしてのman bash
かman cd
)。
また、これはcd
シェルの組み込み関数であり、この答えで読むことができることに注意する必要があります:
cd
外部コマンドではなく、シェルの組み込み関数です。これは現在のシェルのコンテキストで実行され、外部コマンドのように、fork / exec'dコンテキストでは別のプロセスとして実行されません。
外部cd
コマンドがありますが、それはまったく異なることを行います。
これは、BashとCoreutilsが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
cd
は組み込みのものであるということは完全に無関係です。cd -- -
動作しない理由は-
、オプションではなくオペランドであることです。
cd -- -
指定さ-
れたディレクトリに移動します。FWIW。
マイナス(別名、ダッシュ)のみはオプションではなく、オペランド(つまり、オプションではない引数)です。このため、その--
前に配置しても効果はありません。ダッシュはのオペランドでcd -
あり、まだのオペランドですcd -- -
。他の標準ユーティリティと同様にcd
、オペランドが--
前にあるかどうかに関係なく、オペランドとしてオペランドを扱います。
このcd
コマンドは、オペランドに特別な意味を割り当て-
ます。それ以外は、切り替えるディレクトリです。cd -- -a
ディレクトリに切り替わる-a
ので、-a
オペランドとのように特別なものではありません--
防止cd
オプションとして、それを処理するから。これは-
単独では機能せず、オプションではありません。
とにかく-
オペランドを渡すことになるので、引用符で囲むことは役に立ちませ-
ん。
したがって、唯一の手段は、同じアイデアを表現する別の方法、つまり同じディレクトリの別の名前を見つけることです。幸いなことに、簡単な./
方法があります。相対ファイル名の前に追加しても、同じファイルを意味します。この./
場合、違いCDPATH
はありませんが、ディレクトリ名が/
、./
またはで始まる場合は参照されません../
。したがって:
cd ./-
別の方法-
はディレクトリであるため、/
後に追加することです。/
ファイル名の最後にを追加すると、ファイルがディレクトリとして扱われます(特に、ファイルがディレクトリへのシンボリックリンクの場合、コマンドはシンボリックリンクではなくディレクトリ自体で動作します)。変わりはない。したがって:
cd -- -/
-/
ちなみに、書き込みは完了コードによって示唆されていますが、bashでは実際に動作するのはbashだけ--
であり、bashには特別なケースはありませんcd -/
(zshにはありません)。
cd -- -/
、そのcd -
直前に相当するものを実行したため、ディレクトリは実際には存在せず、別の失敗した試行として解釈しました。