it-swarm-ja.com

コマンドCDは何をしますか?

Caps Lockがオンになっていることに気づかなかったので、MacのコマンドプロンプトにCDと入力しました。驚いたことに、それはエラーではありませんでした。

which CD私に/usr/bin/CD。そのファイルを調べると、次のようになります。

#!/bin/sh
# $FreeBSD: src/usr.bin/alias/generic.sh,v 1.2 2005/10/24 22:32:19 cperciva Exp $
# This file is in the public domain.
builtin `echo ${0##*/} | tr \[:upper:] \[:lower:]` ${1+"[email protected]"}

大文字から小文字への変換と関係があると思いますが、${0##*/}私には完全に不透明です。 man CD「手動入力なし」と表示されます。誰かがこのコマンドを説明できますか?

編集:わかりました。OSXのファイルシステムでは大文字と小文字が区別されないため、このファイルは実際には/usr/bin/cd。しかし、通常cdと入力すると、もちろんビルトインが取得されるので、/usr/bin/cdケースを間違えた場合にのみ、呼び出されます。私はまだそれが何をするのか知りたいです。

10
John Fouhy

それはまったく何もしないようです:

Appleメーリングリストリンク

「ここで古い思い出をいくつか取り上げているので、詳細な説明はできませんが、/ usr/bin/cdが存在する理由は、エイリアスに関連するPOSIX要件と、エスケープによってエイリアスを使用できないためです。ただし、/ usr/bin/cdは役に立たないスクリプトです。シェルスクリプト内でcdを実行すると、ディレクトリの変更はスクリプトが実行されるサブシェルにのみ適用されるためです。cdをシェルスクリプトにすることはできません。

また、このスクリプトは、cdだけでなく、多くのコマンドに使用されるという点で一般的なスクリプトです。

きがついた /usr/bin/cd私の10.4システムでのハードリンク数は15です[...] "

そのスレッドのさらに下:

「私の友人は、「$ {0 ## * /}」は「コマンドを実行するが、そのパスを削除する」(つまり、「/ usr/bin/cd」を「cd」に変換する)ことを意味すると教えてくれました。」

したがって、スクリプトはパスを削除し、結果を小文字に変換してから、元の引数を追加しているようです。

12
user12889

それは正しいことをし、あなたの「cd」コマンドを小文字に変換しようとしています。残念ながら、それはサブシェルで実行されるため、かなり無意味です。残りはbashを理解することと関係があります。

1
pbr