Bash:タイプ(Bashビルトイン)の使用とは何ですか?


16

私が見つけたBashスクリプトのコマンドに出会いました:

find /var/log/abcd -type f

上記のコマンドは、ログファイルのクリーニングに関連しています。私は何をするのか知ってfindいます。

を見て-type f、マニュアルページを探しました。BASH_BUILTINS(1)の manページで見ることができました

typeコマンドでの-fフラグの説明は次のとおりです。

The -f option suppresses shell function lookup, as with the command builtin.

以下は私の質問です。

  1. の使用はtype何ですか?
  2. -f旗の意味は何ですか?
  3. typewith findコマンドの使用法は何ですか?

[編集]:-これまでのすべてのコメントと回答を読んだ後、-type option in command findVsの誤解の原因について言及したいと思いtype commandます。これは、すべて私が想定したために起こったと日付までだけ短いオプション(の場合のテスト見ているfindと、コマンド)-シングルマイナス記号「」、例をls -l。ほとんどの時間の私が持つ長いオプション見てきました「 - 」二重のマイナス記号、一例を、ls --version


1
type組み込みコマンドはで使用されていませんfind-typeオプションは、find他の何かを行います。を参照help typeman findて回答を取得してください。

1
この特定の誤解は非常に具体的であり、質問として他の人を助けることはまずありません
-Anthon

9
なぜダウン投票するのですか?この質問はOPがUnixについてあまり知らないことを示していますが、これらの理由で質問に投票するのは正しくありません。Akshayは、ここで質問するほとんどの人がしないmanページを読むことさえしました。
ステファンシャゼル

現在のタイトルは、bashに組み込まれた 'type'の使用を本当に探している人々が正確な回答を得ることを妨げているため、質問のタイトルを言い換えてください。
Sajuuk

回答:


21

この場合type、bashビルトインとは何の関係もありませんtypeが、それについては後で詳しく説明します。

「タイプ」について

BASH組み込みtypeコマンドは、コマンドに関する情報を提供します。したがって:

$ type type
type is a shell builtin

構文は次のとおりです。

type [-tap] [name ...]
  • -t:見つかった場合、タイプのみを印刷
  • -a:組み込みコマンドとその他のコマンドのすべての出現を出力します。
  • -p:コマンドの呼び出し時に実行されるディスクファイルを出力するか、何も出力しません。

を見てtimekillそしてcat例として:

$ type time kill cat
time is a shell keyword
kill is a shell builtin
cat is /bin/cat

$ type -t time kill cat
keyword
builtin
file

$ type -a time kill cat
time is a shell keyword
time is /usr/bin/time
kill is a shell builtin
kill is /bin/kill
cat is /bin/cat

$ type -ta time kill cat
keyword
file
builtin
file
file

ここで、これは、Bashシェルでtypeと入力しているtime some_cmd場合、bashビルトインtimeが使用されることを指定します。システムを使用するには、time次のようにします/usr/bin/time some_cmd

組み込みコマンドではなく、システムコマンドが使用されることを確認するためによく使用される1つの方法は、を使用することwhichです。

tt=$(which time)

そしてを使用$ttしてsystemを呼び出しますtime


問題のコマンド

この場合、これ-typeはコマンドのオプションfindです。このオプションは、エンティティのタイプを指定する引数を1つ取ります。例

find . -type f  # File
find . -type d  # Directory

まだありますman find。残りを確認してください。

特定のオプションを検索するには、次の操作を実行できます(実際に)

/ ^ \ s * -typeEnter

次にn、それが見つかるまでnextを使用します。


シェルコマンドについて少し

これは少し個人的な解釈です。

この特定の場合、言及する価値のあるもののいくつかは、コマンド、オプション、引数、およびパイプです。

これはやや大まかに使用されますが、私の語彙では簡単に言えば:

  • コマンド:プログラムまたはビルトイン
  • パラメータ:コマンドワードの後のエンティティ。
  • option:オプションのパラメーター。
  • 引数:必須パラメーター。

コマンド仕様では、角括弧を使用してオプションを指定し、オプションで引数の指定にそれより少ない/大きいを使用します。したがって:

foo [-abs] [-t <bar>] <file> ...
foo [-abs] [-t bar] file ...

与える-a -b-sオプションのパラメータ、およびとしてfile必要な1。 -tはオプションですが、指定されている場合は必須の引数を取りますbar。ドットは、いくつかのファイルを取ることができることを表しています。

これは何の正確な仕様ではなく、多くの場合、manまたはhelp確認するために必要とされます。

引数オプションと入力の配置はしばしば混同される可能性がありますが、一部のシステムは引数の混合配置を処理しないため、通常は位置ベースのアプローチを維持するのが最善です。例として:

chmod -R nick 722 foo
chmod nick 722 foo -R

どちらも一部のシステムで機能しますが、後者は他のシステムでは機能しません。


正確なコマンドでは、すべてのパラメーターが属します。findしたがって、プロパティについてman find調べるのが正しい場合は正しい場所です。シェルなどのmanページを見る必要がある場合は、たとえば次のようになります。

find . $(some command)
find . `some command`
find . $some_var
find . -type f -exec some_command {} \;
find . -type f | some_command
...

-exec特別なものである-exec some_command {} \;に与えられるすべてのパラメータであるfindが、some_command {} \;一部は内、展開されるfindまでsome_command string_of_found_entity


これより先

  • 引用
  • 拡張
  • コマンド置換
  • などなど

これは便利かもしれません


非常に有益です。
フレドリックガウス

8

またはでman findはなく、見るべきです。in は、必要なファイルの種類を指定します。help typeman bashtypefind

   -type c
          File is of type c:

          b      block (buffered) special

          c      character (unbuffered) special

          d      directory

          p      named pipe (FIFO)

          f      regular file

          l      symbolic link; this is never true if the -L option or the
                 -follow option is in effect, unless the symbolic link  is
                 broken.  If you want to search for symbolic links when -L
                 is in effect, use -xtype.

          s      socket

          D      door (Solaris)

そして、組み込みtypeは完全に異なるものであり、内部で使用されるものではありませんfind


0

あなたは間違ったマニュアルページに目を向けました。これはtype -fコマンドではなくfind -type fオプションであり、まったく異なっていますfind。適切な説明についてはマニュアルをご覧ください。


0

-type fタイプfのファイル、つまりディレクトリではなく、シンボリックリンクやデバイスファイルではないプレーンファイルのみを印刷するようにfindに指示します。man find次に-fオプションを検索します。


0

これはあなたが見ている正しいマニュアルページではありません。あなたが使用する必要があります

man find

それは、とのことを教えてくれますのみ、通常のファイル述語選択します。-type f-type

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