web-dev-qa-db-ja.com

Linux端末で、cd ..が機能しないのはなぜですか?

Windows/DOS端末ではcd..ディレクトリを正しく変更します。

Linux端末では、cdコマンドのドットを区切る必要があります。パーサーが機能するためにこれがどのように/なぜ必要なのか知りたいのですが。スペースが追加されていない場合、コマンドは理解されません。

これはうまくいきます

 cd ..

これは動作しません

cd..

おそらく、正規表現またはコマンドを解析しているものは、コマンドの直後に可能な文字としてドットを含めていません。

1
mario ruiz

通常の構文はcd ..です。 Windowsコマンドインタープリターはもう少し柔軟性があり、cd..も受け入れます。

cd..を使用すると、シェルは正確にcd..という名前のコマンドまたはプログラムを見つけようとします。

bashがコマンドcd..を受け入れるようにするには、エイリアスを定義できます。

alias cd..="cd .."
9
Bodo

本当の違いはありません。 Windows CMDシェルはタイプミスに対応することを決定しましたが、Linuxのシェルは、コマンドまたはプログラム(この場合はシェルの組み込みCD)を引数から分離することに関してより厳密です。

6
labradort

Linux端末では、cdコマンドからドットを分離する必要があります。パーサーが機能するためにこれがどのように/なぜ必要なのか知りたいのですが。

おそらく、正規表現またはコマンドを解析しているものは、コマンドの直後に可能な文字としてドットを含めていません。

はい、ある意味で。シェル(少なくともPOSIXのもの)は、.を文字や数字と同じように、通常の文字として扱います。 ;<(など、他の一部の文字には特別な意味があります(引用符で囲まれていない場合)。空白と一部の特殊文字を使用して、コマンドを単語に分割できます。

ディレクトリとファイル名にドットを含めることができることを考慮すると(特に、..が一般的なディレクトリ名であるという事実)、コマンドラインパーサーがドットを通常の文字として扱うことをお勧めします。それ以外の場合、../foo.sh some argsのようなコマンドはどのように機能しますか?最初の部分はoとドットの間で分割されますか?または、すでにドットとスラッシュの間にありますか?

cd..のようなコマンドをcd ..のように扱うことを許可すると、多くの特殊なケースが必要になる可能性があり、実装が厄介になり、ユーザーが混乱します。空白で分割してから、最初のWordをコマンドとして使用する方がはるかに簡単です(組み込み、関数、または外部コマンドのいずれであるかに関係なく)。厳密には必要ではなく、他の方法よりも単純に見えます。

4
ilkkachu