echoがシェル組み込みコマンドであるのはなぜですか?

echoがシェル組み込みコマンドであるのはなぜですか?
$ which echo
echo: shell built-in command.
$ which ls
/bin/ls
$ which cat
/bin/cat

echoなどのスタンドアロンlsユーティリティpsではないのはなぜですかcat?なぜシェルに固有ですか?妥当な理由はありますか?

ベストアンサー1


組み込み関数には2種類あります。

  1. 一部のコマンドは外部コマンドの場合は機能しないため、シェルプログラム自体に組み込む必要があります。

    cdそれがすべてです。外部の場合は独自のディレクトリのみを変更できるため、シェルの現在の作業ディレクトリには影響しません。 (また見てください:なぜcdプログラムではないのですか?)

  2. 純粋に効率のために、別のクラスのコマンドがシェルに組み込まれています。

    これdash マニュアルページこのクラスでは、コマンドのprintf例として、および上記echoの組み込みコマンドのセクションがあります。test

Unix システムには、常に 2 番目のタイプのコマンド用の別々の実行可能ファイルが含まれています。これらの個々の実行可能ファイルは、私が使用したすべてのUnixyシステムでまだ使用できますが、使用しているすべてのシェルにも組み込まれています。 (POSIXこれらの実行可能ファイルは実際に存在する必要があります。 )

echo私はこれがAT&T Unix System V Release 3.1のシェルに組み込まれていると思います。私の結論は、AT&Tマニュアルの2つのバージョンを比較した結果です。3B1シリーズUNIXシステム。誰か親切にこのマニュアルの1986年版をスキャンしてくれました。オンラインでアップロード;これらはSVR3のオリジナルバージョンに対応しています。echo523ページのリストにないものが表示されます。UNIX System Vユーザーズマニュアル、2巻、コマンドがシェルに組み込まれている場合は期待どおりです。 1987年のSVR3.1マニュアルの私の地元の紙のコピーには、次の内容があります。echo はいこのマニュアルのこのセクションに記載されています。

ここがバークレーではないことは確かです。中国南方研究グループAT&Tはイノベーションを国内にもたらします。 4.3BSDはSVR3と同じ年である1986年にリリースされました。4.3BSD sh.1 マンページecho、特殊コマンドセクションの組み込みコマンドリストにないことがわかります。 CSRGがこれを行った場合、これを実証するために文書化されたソースが必要です。

この時点で、SVR3.1がSVR3.1より前にシェルに組み込まれていたかどうか疑問に思うかもしれませんが、echoまったくそうではありません。録音されたそれまで。私が利用できる最新のSVR3以前のAT&T Unixソースコードは次のとおりです。PDP-11 System III圧縮パッケージ、Bourneシェルのソースコードを見つけることができます。echoの組み込みコマンドテーブルにはこのコマンドがありません/usr/src/cmd/sh/msg.c。ファイルのタイムスタンプによると、echo1980は間違いなくシェルにありません。


面倒なこと

同じディレクトリには、この質問に関する内容がまったく含まれていないファイルも含まれていますが、次builtin.cの興味深い説明が見つかりました。

/*      
    builtin commands are those that Bourne did not intend
    to be part of his shell.
    Redirection of i/o, or rather the lack of it, is still a
    problem..
*/      

おすすめ記事