この名前が「-2」(ハイフンで始まる)のディレクトリにcdする方法は?


169

次の名前のディレクトリがあります:

-2

私はそれにCDを入れたいが、CDは文句を言います:

bash: cd: -2: invalid option

成功せずに、私は試しました:

cd "-2"
cd '-2'
cd \-2

解決策はありますか?

編集:サーバーで使用可能なmcなどのファイルブラウザはありません。


2
スーパーユーザーに関する関連質問:superuser.com/questions/361573/…-yms
1

回答:


272

少なくとも2つの方法:

  1. --引数を使用します。

    cd -- -2
    

    これは、GNUツールに共通の規則を使用します。これは--、コマンドラインオプションとして後に表示されるものを処理しないことです。

    コメンターは指摘し、この大会もされ、POSIX標準で定義されています

    デフォルトの動作:このセクションが「なし」としてリストされている場合、実装がオプションをサポートする必要がないことを意味します。オプションを受け入れないが、オペランドを受け入れる標準ユーティリティは、"--"破棄される最初の引数として認識しなければなりません。

    認識の要件"--"は、適合アプリケーションが、実装が拡張として提供する可能性のある任意のオプションからオペランドを保護する方法を必要とするためです。たとえば、標準ユーティリティfooがオプションを使用しないものとしてリストされ、アプリケーションがパス名に先頭にハイフンを付ける必要がある場合、次のように安全に実行できます。

    foo -- -myfile
    

    -mを拡張機能として使用することによる問題を回避します。

    と同様に

    ガイドライン10:
    引数--は、オプションの終わりを示す区切り文字として受け入れられるべきです。後続の引数は、'-'文字で始まる場合でもオペランドとして扱われる必要があります。--引数には、オプションとして、あるいはオペランドとして使用すべきではありません。

  2. パスを明示的に指定します。

    cd ./-2
    

    これは、現在のディレクトリ(.)を開始点として明示的に指定するパスを指定します。

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    これらは上記のバリエーションです。そのようなバリエーションはいくつでも可能です。それらすべてを発見するための演習として読者に任せます。


23
GNUだけでなく、POSIX標準の一部です。1.11ユーティリティの説明のデフォルト12.2ユーティリティの構文のガイドライン(ガイドライン#10)を参照してください。「ユーティリティは...セクション12.2に適合しなければならない」cdページからcd
ディートリッヒエップ

今、私は-!というディレクトリにcdする方法に興味があります。
sergiol

2
@sergiol同じ方法。
マイケルハンプトン

1
@ArtB:いいえ。引用はフィールド分割にのみ影響します。だから、"hello world"1つの引数があるが、hello world2であり、かつ"-2"同じです-2
ディートリッヒエップ

1
@sergiol:どちらかcd -- --または動作するcd ./--はずです。
キーストンプソン


26

これは、「-2」が現在のディレクトリにある場合に機能します。

    cd ./-2

入力し、タブを押すとオートコンプリートできます。



7

補足として、このディレクトリを削除/削除する場合は、次のコマンドを使用できます。

rm -r -- -2

...補完するために、私はそれを決してしません。むしろ、mcのようなグラフィカルツールを使用するか、最初にディレクトリの名前を変更します。
ニック

-1

この質問には既に回答済みです。誰かが私のような状況にあるなら、これは彼らのためです:

Javaアプリを実行し、で始まるディレクトリを探していました<path>。アプリを実行する前に、適切なパスに置き換える必要がありました。しかし、私はそれをするのを忘れていました。アプリはというディレクトリを作成しました<path>

私がしようとしたcd <path>-私にエラーを与えた:ここでの提案に基づき、「-bash予期しないトークン改行の近くに構文エラー」(私はそのディレクトリのために始まることを理解-とない<)私が試してみましたcd -- <path>。ただし、同じエラーが発生しました。

私が試したときcd \<path>\-これはうまくいきました!

背景情報:

記号 "<"および ">"は、STDINおよびSTDOUTのリダイレクトに使用されるため、シェルがそれらをリダイレクトとして解釈しないようにするためにエスケープする必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.