タグ付けされた質問 「shell-builtin」

ビルトインシェルは、シェルから呼び出されるコマンドであり、シェル自体で直接実行されます。


5
evalとexecの違いは何ですか?
evalそしてexec両方のコマンドを実行するのbashのコマンド(1)に内蔵されています。 またexec、いくつかのオプションがありますが、それが唯一の違いですか?彼らの文脈はどうなりますか?

4
組み込みコマンドとそうでないコマンドの違いは何ですか?
組み込みコマンドと、名目上は同じことを実行できる別のコマンドの間に本質的な違いはありますか? 例えば。ビルトインは「特別な」治療を受けますか?...それらを実行するオーバーヘッドが少ないですか?..または単に「組み込み」だけです; あなたの車のダッシュボードのような? ...そして、これらの組み込みの決定的な(現在の)リストはありますか?

4
なぜ `[`はシェル組み込みコマンドで、 `[[`はシェルキーワードですか?
私の知る限り、[[はの拡張バージョンです[が[[、キーワード[として表示され、組み込みとして表示されると混乱します。 [root@server ~]# type [ [ is a shell builtin [root@server ~]# type [[ [[ is a shell keyword TLDPは言う ビルトインは同じ名前のシステムコマンドの同義語である場合がありますが、Bashは内部的に再実装します。たとえば、Bashのechoコマンドは/ bin / echoと同じではありませんが、動作はほとんど同じです。 そして キーワードは、予約語、トークン、または演算子です。キーワードはシェルにとって特別な意味を持ち、実際、シェルの構文の構成要素です。例として、for、while、do、および!キーワードです。ビルトインと同様に、キーワードはBashにハードコーディングされますが、ビルトインとは異なり、キーワードはそれ自体がコマンドではなく、コマンド構成のサブユニットです。[2] それは両方[と[[キーワードを作るべきではありませんか?ここに欠けているものはありますか?また、このリンクの両方のことを再断言[とは[[同じ種類に属している必要があります。

8
POSIX必須ユーティリティがシェルに組み込まれていないのはなぜですか?
この質問の目的は、特定のコンピューティング問題を解決することではなく、好奇心に答えることです。問題は、なぜPOSIXの必須ユーティリティがシェル実装に組み込まれていないのですか? たとえば、基本的にいくつかの小さなテキストファイルを読み取り、それらが適切にフォーマットされていることを確認するスクリプトがありますが、かなりの量の文字列操作のために、マシンで実行するのに27秒かかります。この文字列操作は、さまざまなユーティリティを呼び出すことで数千の新しいプロセスを作成するため、速度が低下します。私はユーティリティのいくつかは、すなわち、中に建設された場合のことをかなり確信していますgrep、sed、cut、tr、およびexpr、スクリプトが第二に実行します以下(Cでの私の経験に基づきます)。 これらのユーティリティをビルドすると、シェルスクリプトのソリューションのパフォーマンスが許容範囲内であるかどうかが異なる場合が多いようです。 明らかに、これらのユーティリティをビルトインしないことを選択した理由があります。システムレベルで1つのバージョンのユーティリティを使用すると、そのユーティリティの複数の異なるバージョンがさまざまなシェルで使用されることがなくなります。私は本当に多くの新しいプロセスを作成するオーバーヘッドを維持するために他の多くの理由を考えることはできません。準拠しています。少なくとも非常に多くのプロセスを持つことの非効率性ほど大きな問題ではありません。

7
コロンビルトインはどのような目的に役立ちますか?
私は多くのシェルスクリプトをハッキングしてきましたが、時には最も単純なことが私を困惑させます。今日、:(コロン)bashビルトインを広範囲に使用するスクリプトに出会いました。 documenationは、単純な十分です。 : (a colon) : [arguments] 引数を展開してリダイレクトを実行する以外は何もしません。戻りステータスはゼロです。 ただし、これはシェル拡張のデモンストレーションで使用されているだけです。私が出会ったスクリプトのユースケースでは、この構造を広範囲に使用しました。 if [ -f ${file} ]; then grep some_string ${file} >> otherfile || : grep other_string ${file} >> otherfile || : fi 実際には何百ものグレープがありましたが、それらは同じものです。上記の単純な構造以外の入出力リダイレクトは存在しません。スクリプトの後半で戻り値はチェックされません。 私はこれを「または何もしない」という意味のない構成として読んでいます。これらの不満を「または何もしない」で終わる目的は何ですか?どのような場合、この構成は|| :、すべてのインスタンスから単純に離脱するのとは異なる結果を引き起こしますか?

1
`compgen`組み込みコマンドを理解する
からhelp compgen: $ help compgen compgen: compgen [-abcdefgjksuv] [-o option] [-A action] [-G globpat] [-W wordlist] [-F function] [-C command] [-X filterpat] [-P prefix] [-S suffix] [word] Display possible completions depending on the options. Intended to be used from within a shell function generating possible completions. If the optional WORD …


6
「cat」は組み込みのシェルですか、外部プログラムですか?
typeコマンドを使用してcat、シェルが組み込みか外部プログラムかを調べると、以下の出力が得られます。 -$ type cat cat is hashed (/bin/cat) -$ catこれは外部プログラムであることを意味し/bin/catますか? 私が混乱したのは、以下の出力を確認したときにecho、それがbuilt-inプログラムであることがわかったからです/bin/echo -$ type echo echo is a shell builtin -$ which echo /bin/echo -$ したがって/bin/cat、エコーは/bin/echo組み込みであるため、必ずしも外部プログラムを意味するロジックを使用できませんでした。 だから私はどのように私が知ってcatいますか?組み込みまたは外部?
33 bash  cat  echo  shell-builtin 

5
bashにシェル組み込みではなく外部の `time`コマンドを使用させる
shellキーワードの代わりにbashにデフォルトで時間バイナリ(/ usr / bin / time)を使用させるにはどうすればよいですか? which time戻り/usr/bin/time type time値戻り値time is a shell keyword Running timeは、明らかにshellキーワードを実行しています。 $ time real 0m0.000s user 0m0.000s sys 0m0.000s $ /usr/bin/time Usage: /usr/bin/time [-apvV] [-f format] [-o file] [--append] [--verbose] [--portability] [--format=format] [--output=file] [--version] [--quiet] [--help] command [arg...] enable -n time 返す bash: enable: time: …


2
POSIXが特定のシェルビルトインで外部実装を必要とするのはなぜですか?
printfがyashの組み込みであるかどうかに関するこの質問から、POSIX標準を引用するこの答えが出てきます。 答えは、POSIX検索シーケンスは目的のコマンドの外部実装を見つけ、シェルがそれを組み込みとして実装している場合、組み込みを実行することであると指摘しています。(特別なビルトインではないビルトインの場合) POSIXには、内部実装の実行を許可する前に、外部実装が存在するというこの要件があるのはなぜですか? それは... arbitrary意的だと思うので、私は興味があります。

5
`time`の出力をファイルに書き込みます。なぜ括弧が必要なのですか?
timeに書き込みますstderrので2>&1、コマンドラインに追加すると出力がルーティングされるべきだと思いstdoutます。しかし、これは機能しません: test@debian:~$ cat file one two three four test@debian:~$ time wc file > wc.out 2>&1 real 0m0.022s user 0m0.000s sys 0m0.000s test@debian:~$ cat wc.out 1 4 19 file かっこでのみ機能します: test@debian:~$ (time wc file) > wc.out 2>&1 test@debian:~$ cat wc.out 1 4 19 file real 0m0.005s user 0m0.000s sys 0m0.000s この場合、なぜ括弧が必要ですか?なぜ単一のコマンドtime …

6
フルパスを指定せずに、Bashビルトインの代わりにシステムコマンドを使用する
私は対話型シェルとしてBashを使用していますが、両方が同じ名前を共有している場合、Bashにシェル組み込みコマンドの代わりにシステムコマンドを実行させる簡単な方法があるかどうか疑問に思っていました。 たとえば、次のシステムを使用してkill(からutil-linux)シグナルを送信する代わりに、指定されたプロセスのプロセスID(pid)を出力します。 $ /bin/kill -p httpd 2617 ... システムコマンドのフルパスを指定しないと、システムコマンドの代わりにBashビルトインが使用されます。kill組み込みは持っていない-pコマンドが失敗したように、オプションを: $ kill -p httpd bash: kill: p: invalid signal specification Make bashがシェル組み込みではなく外部の `time`コマンドを使用するようにリストされている回答を試しましたtimeが、実際にはシェルキーワードであり、シェル組み込みではないため、ほとんどが機能します。 で一時的にBashビルトインを無効にする以外にenable -n kill、これまでに見た中で最良の解決策は以下を使用することです: $(which kill) -p httpd シェルビルトインの代わりに外部コマンドを実行する他の簡単な(タイピングが少ない)方法はありますか? これkillは単なる例であり、組み込みコマンドをプレフィックスとして使用すると、外部コマンドと同じ名前の関数が実行されないようにする一般的なソリューションcommandが必要です。ほとんどの場合、新しいプロセスをフォークする必要がないため、組み込みバージョンを使用することを好みます。また、組み込みコマンドには外部コマンドにはない機能がある場合があります。

1
どことどこの違いは何ですか
whereとwhichシェルコマンドの違いは何ですか?下記は用例です ~ where cc /usr/bin/cc /usr/bin/cc ~ which cc /usr/bin/cc そして ~ which which which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde' /usr/bin/which ~ which where /usr/bin/which: no where in (/usr/local/bin:/bin:/usr/bin:/home/bnikhil/bin:/bin) また ~ where which which: aliased to alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde which: shell built-in command /usr/bin/which /usr/bin/which …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.