$ which echo
echo: shell built-in command.
$ which ls
/bin/ls
$ which cat
/bin/cat
echoなどのスタンドアロンls
ユーティリティps
ではないのはなぜですかcat
?なぜシェルに固有ですか?妥当な理由はありますか?
ベストアンサー1
組み込み関数には2種類あります。
一部のコマンドは外部コマンドの場合は機能しないため、シェルプログラム自体に組み込む必要があります。
cd
それがすべてです。外部の場合は独自のディレクトリのみを変更できるため、シェルの現在の作業ディレクトリには影響しません。 (また見てください:なぜcd
プログラムではないのですか?)純粋に効率のために、別のクラスのコマンドがシェルに組み込まれています。
これ
dash
マニュアルページこのクラスでは、コマンドのprintf
例として、および上記echo
の組み込みコマンドのセクションがあります。test
Unix システムには、常に 2 番目のタイプのコマンド用の別々の実行可能ファイルが含まれています。これらの個々の実行可能ファイルは、私が使用したすべてのUnixyシステムでまだ使用できますが、使用しているすべてのシェルにも組み込まれています。 (POSIXこれらの実行可能ファイルは実際に存在する必要があります。 )
echo
私はこれがAT&T Unix System V Release 3.1のシェルに組み込まれていると思います。私の結論は、AT&Tマニュアルの2つのバージョンを比較した結果です。3B1シリーズUNIXシステム。誰か親切にこのマニュアルの1986年版をスキャンしてくれました。オンラインでアップロード;これらはSVR3のオリジナルバージョンに対応しています。echo
523ページのリストにないものが表示されます。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
。ファイルのタイムスタンプによると、echo
1980は間違いなくシェルにありません。
面倒なこと
同じディレクトリには、この質問に関する内容がまったく含まれていないファイルも含まれていますが、次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..
*/