2

bashシェルに組み込まれているツールについて考えていました。たとえば、シェルに組み込まれtype pwdていることを教えてください。pwd

whereis pwd
/bin/pwd /usr/include/pwd.h /usr/share/man/man1/pwd.1.gz

aptitude search pwd

私が使用するpwdには何も与えない(そう思われる)。(私はDebianシステムを使用しています。)

-どのようなものが組み込まれているのかを知る方法はありますか?でブルートフォースに加えてtype、それはです。

-フォルダ(上記)内は、組み込まれているものと同じpwdですか?開始時にシェルにロードされていますか?それとも、シェルによってそのフォルダから実行されますか?もしそうなら、それはどのように組み込まれていますか?binpwd

-そもそもなぜものが組み込まれているのですか?それらはシェルに合うように特に調整されていますか、それとも新しいプロセスを必要としないように内部で呼び出すことができるようにするためですか?pwdpwd &でなんとかキャッチできましたps。これは回避策ですか、それとも別々のプロセスですか?

-このトピックについて他に何か教えてください:)

4

7 に答える 7

3

どのようなものが組み込まれているかを調べる方法はありますか?

help完全なリストが表示されます。組み込みコマンドを引数として実行するhelpと、より詳細な情報を取得できます。info "(bash) Shell Builtin Commands"すべてのビルトインの Bash マニュアルが表示されます。

フォルダー内 (上記) は、組み込まpwdれているものと同じですか?binpwd

いいえ、それらは完全に異なります。

$ builtin pwd --help
bash: pwd: --: invalid option
pwd: usage: pwd [-LP]

$ /bin/pwd --help
Usage: /bin/pwd [OPTION]...
Print the full filename of the current working directory.

  -L, --logical   use PWD from environment, even if it contains symlinks
  -P, --physical  avoid all symlinks
      --help     display this help and exit
      --version  output version information and exit

NOTE: your shell may have its own version of pwd, which usually supersedes
the version described here.  Please refer to your shell's documentation
for details about the options it supports.

Report bugs to <bug-coreutils@gnu.org>.

そもそもなぜ物が組み込まれているのですか?それらはシェルに合うように特別に調整されていますか、それとも新しいプロセスを必要としないように内部で呼び出せるようにするためですか?

マニュアルから: 「別のユーティリティでは取得できない、または不便な機能を実装するには、組み込みコマンドが必要です。」cdシェルの状態に影響を与えるため、コマンドのようなコマンドを外部で機能させるのは難しいでしょう。もちろん、pwdまたはの動作を簡単に複製できますtrueが、POSIX 標準では、それらが組み込みの である必要があります

とで apwdをキャッチすることができました。これは回避策ですか、それとも別のプロセスですか?pwd &ps

builtin を実行&すると、Bash はバックグラウンドでサブシェルを実行します。は入力があるまで待機するためread &、 を実行することでこれを簡単に確認できます。read

于 2011-12-12T21:23:47.637 に答える
1

最初の質問に答えるために、(bash シェルで)「builtin」と入力してからタブタブを入力すると、タブ補完があるため、組み込みのリストが表示されることがわかりました。あなたが求めていることのほんの一部であることはわかっていますが、すべての「理由」を知っているわけではないので、それは始まりです. :P

于 2011-12-12T21:22:17.390 に答える
1

シェル組み込みの完全なリストについては、 を使用してman bashください。ビルトインは、シェルが実際のシェル実行可能ファイル内でコンパイルしたコマンドです。そうすれば、何らかの理由でechoコマンドがない場合でも、シェルから実行できます。これは、簡素化されたシステム (組み込みデバイスなど) や、ハードドライブのセクションを誤って消去してしまった場合に便利です。

通常、ビルトインは外部実行可能ファイルよりも制限されていますが、別のプロセスを起動する必要がないため、十分なリソースがない場合があります。繰り返しますが、ほとんどの人はそれに遭遇することはありませんが、組み込みシステムとエラー回復には便利です。

于 2011-12-12T21:27:40.560 に答える
1

man builtinどのコマンドが組み込みで、どのように実行されるかを示します。マニュアルページから:

シェル組み込みコマンドは、実行中のシェルのプロセス内で実行できるコマンドです。

また、そのマニュアル ページでは、他のプロセスが組み込まれていることを確認できman pwdますpwd

manページはあなたの友達です:)

于 2011-12-12T21:28:39.597 に答える
1

シェルのビルトインは、個別のバイナリよりも明らかに効率的です。個別のバイナリは完全に独立しており、基本的に、この機能が組み込まれていない他のシェルで使用するためのものです。コマンドを引用符で囲むことで、bash に強制的にバイナリを使用させることができます (IIRC. man bash組み込みコマンドとそれらがどのように機能するかについてのかなりの情報を見つけることができれば(外部バイナリのように常に同じであるとは限りません)。

于 2011-12-12T21:24:58.977 に答える
1

bashマニュアル ページ ( ) にはman bash、ビルトインが列挙されています。

whichコマンドは、組み込み以外のものが見つかった場所などを考慮${PATH}してリストします。

のファイルは/bin/、それらをビルトインとして持たないシェルを使用する場合の代替品です。

forkそれらは/を避けるために効率のために組み込まれていますexecbash、特に通常は必要に応じて静止するのに十分スマートですfork(例:|または&操作)

でバージョンを実行する必要がある場合は、完全なパス名 (たとえば) でbin呼び出すことができます。/bin/pwd(これは回避aliasなどにも使用されます。) — これは ではめったに役に立ちbashませんが、たとえば などの非常に単純な組み込みシェルを使用している場合は、組み込みシェルbusyboxが機能のサブセットであることが多いため、これは役立ちます。

于 2011-12-12T21:25:28.513 に答える
1

bash のメイン ページに記載されているように、ヘルプ ビルトインを使用して、すべての bash ビルトインに関する情報を取得できます。したがって、次のように入力します。

help

完全なリストが表示されます。ビルトインを使用する理由は、それらを呼び出すことが新しいプロセスにまたがることを伴わないため、より効率的だからです。特定のコマンドにビルトインを使用するのではなく、コマンド自体を使用する場合は、コマンドのフル パスをシェルに指定する必要があります。例えば

/bin/echo

ただの代わりにecho

于 2011-12-12T21:35:40.400 に答える