Linuxコマンドに遭遇しましたbuiltin cd
。
コマンドbuiltin cd
との違いは何cd
ですか?
実際、私は違いについていくつかの研究をしましたが、これについて注目すべき重要な説明を見つけることができませんでした。
Linuxコマンドに遭遇しましたbuiltin cd
。
コマンドbuiltin cd
との違いは何cd
ですか?
実際、私は違いについていくつかの研究をしましたが、これについて注目すべき重要な説明を見つけることができませんでした。
回答:
このcd
コマンドは組み込みであるため、通常builtin cd
はと同じことを行いcd
ます。ただしcd
、関数またはエイリアスとして再定義された場合、違いcd
があります。その場合、関数/エイリアスを呼び出しますがbuiltin cd
、ディレクトリを変更します(つまり、関数によって上書きされてもビルトインにアクセスできます)
例えば:
user:~$ cd () { echo "I won't let you change directories"; }
user:~$ cd mysubdir
I won't let you change directories
user:~$ builtin cd mysubdir
user:~/mysubdir$ unset -f cd # undefine function
またはエイリアスを使って:
user:~$ alias cd='echo Trying to cd to'
user:~$ cd mysubdir
Trying to cd to mysubdir
user:~$ builtin cd mysubdir
user:~/mysubdir$ unalias cd # undefine alias
を使用することは、何かをしてディレクトリを変更builtin
するcd
関数を定義するための良い方法でもあります(それから呼び出すcd
と、無限の再帰で関数を再度呼び出し続けることになります)。
例えば:
user:~ $ cd () { echo "Changing directory to ${1-home}"; builtin cd "$@"; }
user:~ $ cd mysubdir
Changing directory to mysubdir
user:~/mysubdir $ cd
Changing directory to home
user:~ $ unset -f cd # undefine function
builtin cd mysubdir
あり\cd mysubdir
ますか?
ほとんどの場合、違いはありません(ただし、以下を参照)。このcd
コマンドは、すべてのシェルの組み込みコマンドです。外部コマンドは呼び出しシェルの環境を変更できないため、組み込み1である必要があります。作業ディレクトリを変更すると、その環境が変更されます。
このbash
コマンドbuiltin
は、シェル関数、エイリアス、または同じ名前で利用可能な外部コマンドがある場合でも、シェルにコマンドの組み込みバージョンを強制的に使用させます。
そこの場合された名前のシェル関数を例えばcd
、その後builtin cd
うではないことを呼び出します。 使用builtin cd
すると、ユーザーがシェル関数またはエイリアスを介して追加した可能性のあるオーバーロードされた機能がバイパスされます。
例:
cd
組み込みコマンドプロンプトを更新機能により、過負荷状態にすることができます。
cd() {
builtin cd "$@" && PS1=$(__update_prompt)
}
どこに__update_prompt
文字列を出力する他のユーザー提供の関数があります。
builtin cd
機能では、再帰関数を呼び出すことはありません。builtin cd
この関数がアクティブなシェルで使用すると、さらに関数を呼び出さないでしょう。
1外部cd
コマンド(macOS、および私は信じる、Solaris)を持つUnicesがあります。シェルの作業ディレクトリを変更できないこのコマンドの目的は、POSIX標準を満たすcd
ことです。これは、利用可能な外部ユーティリティの1つとしてリストされています(cd
「特別な組み込みユーティリティ」の1つではありません) 。また、特定のディレクトリへの作業ディレクトリの変更が可能かどうかを確認するテストとして機能する場合もあります。
cd
コマンドを使用してOSのカテゴリに分類されます。