1
[root@MGWSDT_FEWS bin]# type cd
cd is a shell builtin
[root@MGWSDT_FEWS bin]# which cd
/usr/bin/which: no cd in (.:/usr/expect/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/opt/real/RealPlayer:/root/bin)

cd は組み込みコマンドであるため、「どの cd」が失敗したかを示しています。

「pwd」も組み込みコマンドですが、なぜ「どの pwd」でその場所を取得できるのですか?

[root@MGWSDT_FEWS ~]# type pwd
pwd is a shell builtin
[root@MGWSDT_FEWS ~]# which pwd
/bin/pwd
4

6 に答える 6

1

sudoコマンドが終了すると、コマンドが実行される前に中断したところからシェルが再開することを理解してください (もちろん、シェルの現在の作業ディレクトリは変更されません)。そのcdため、シェル組み込みである必要があります。それ以外の場合は、cd終了時に、シェルは同じ古い現在の作業ディレクトリに戻ります。つまり、子プロセス (つまり外部コマンド) は、親プロセス (つまりシェル) の作業ディレクトリを変更できません。

礼儀: https://bbs.archlinux.org/viewtopic.php?id=127225

于 2013-08-14T07:49:54.677 に答える
0

cd コマンドは bash のコマンドです。(bash 組み込みコマンド)

cd の使用方法は「man bash & find cd」で確認できます。

逆に、pwd はスタンドアロン コマンドです。

于 2013-08-14T07:49:57.080 に答える
0

組み込みコマンドはシェルの内部コマンドであり、外部コマンド (ファイル) よりも優先度が高くなります。また、組み込みコマンドは関数よりも優先度が低いため、次のように組み込みコマンドと同じ名前の関数がある場合、組み込みは実際に役立ちます。

function cd {
    if [[ $# -gt 0 ]]; then
        echo "Changing directory to $1."
        builtin cd "$1"
    else
        echo "Changing to default directory."
        builtin cd
    fi
}

cd "/some/where"

要約すると、関数はビルトインの前に最初に呼び出され、ビルトインはバイナリコマンドまたはファイルの前に最初に呼び出されます。type コマンドも、引数を解釈するときにその順序に従うと思います。

于 2013-08-14T07:55:27.700 に答える
0

「コマンド」が重複している場合がいくつかありますが、もちろんこれはインストールによって異なります。呼び出されたシェル組み込みがある場合はそれが使用されますが、組み込みとして持たないpwdシェル ( ) が存在する可能性があります。cshpwd

printfandの組み込みシェルですが、 orのシェルではbashありksh93ません。ksh88csh

もう 1 つの (より奇妙な) 例は です[。これは組み込みのシェルですが、(一部のシステムでは) へのシンボリック リンクですtest(これも組み込みのシェルである可能性があります)。

インストールは、 だけでなく、多くのシェルやその他のプログラムをサポートするためにありますbash

于 2013-08-14T07:56:25.543 に答える
0

cd は別のプロセスであるため、シェルに組み込まれている必要があります。コマンドが終了すると、コマンドの効果はなくなります。(Sakthi Kumarの回答を参照してください。)

一方、 、 などの他のコマンドはpwd、 、などのtestバイナリとして利用できます。ただし、最適化のために、シェルは /bin/bash 自体内にこれらのバイナリを実装しているため、別のプロセスを作成するオーバーヘッドが回避されます。 ./bin/pwd/usr/bin/test

を呼び出すとpwd、シェルは独自のpwd実装を呼び出します。の代わりに を/bin/pwd使用してバイナリを呼び出すことができます。command pwdpwd

于 2013-08-14T07:56:52.697 に答える