異なる概念を表現するために異なる用語を使用すると、明確な思考と明確なコミュニケーションが促進されます。
これは両方の概念が非常に似ていますが、他の場合に特に便利です。
私たちは「コマンド」という用語に非常に似ていますが、他の2つの概念を意味するために使用する傾向があります。
概念1:コマンドラインインターフェースに入力された単一プログラム。
オプションはプログラムに渡すことができますが、まだ1つのプログラムのみを使用しています。
例):
$ ls
$ ls -alF
この概念を「コマンド」といいます。
概念2:Enterキーを押す前にコマンドラインインターフェイスに入力した内容は、シェルがそれを処理するように指示します。
例):
$ ls -alF | head > output.txt; cat output.txt
この概念は「コマンド」とも呼ばれます。
これは、前の定義に従って3つの異なる「コマンド」を含む場合でも同様です。
アイデアをより正確に考え、伝えるために異なる概念を表現するために異なる用語を使用したい人は、これら2つの概念を表現するためにどの用語を使用するのが最善ですか?
答え1
まあ、特にシェルコマンド言語の仕様を読むことができるようです。2.9 シェルコマンド。
このセクションでは、シェルコマンドの基本構造を紹介します。次のコマンドの説明はそれぞれコマンドの形式を説明し、読者がコマンドの種類を識別するのを助けるだけで構文を正式に表していません。 [...] 各説明は、コマンド言語の形式的定義に対するコマンドの意味を説明します。シェル構文。
コマンドは、[単純コマンド、パイプ、リスト、複合コマンド、関数定義]のいずれかです。
以下のもの簡単なコマンド、ls
これは「コマンド名」です。
ls -alF
以下のもの管路2つの簡単なコマンドがあります。
ls -alF | head > output.txt
ls -alF | head > output.txt; cat output.txt
(ここで最初の例を(縮退)パイプラインと考えることもできます。)
以下は、複合コマンドと単純なコマンドのパイプラインを含むANDリストを含むリストです。リストの次はもう一つの簡単なコマンドです。
for x in a b c; do echo "$x"; done | cat -n && echo ok; echo end.
(リストの一部を正しく読んだ場合は、;
コマンドを改行で区切ると複合リストになりますが、すでに問題があります。)
私は実際には他の文書(またはこのサイトの投稿)がこれらの正確なフレーズの(正しい)使用に慎重に従うとは思わないので、それを正確に使用してコミュニケーションを試みることは難しいかもしれません。カオスを受け入れてください。
答え2
私は一般的に「コマンド」と呼ばれる4つの異なる概念があると思います。複雑さが増す順序で:
コマンド名:実行可能プログラムまたはスクリプトの名前(またはパス)。たとえば、、
ls
など。cat
/usr/libexec/bootpd
コマンド名およびパラメータリスト。たとえば
ls
、、-l
および/etc
。これはパラメータに対応します。execl()
(コマンド名は2回渡されることを除いて)、他のほとんどの実行コマンドと一緒に、またはfind .. -exec
コンテキストでsudo
実行できます。殻を通らないようにしてください。。この形式では、パラメータには構文がなく、文字列にすぎず、実行可能なコマンドがその意味を決定します。find ... -exec
(orを実行すると、コマンド全体がsudo
シェルによって解析されますが、これを実行するコマンドでfind
はなく/コマンドですsudo
。これがwhatまたは実行にリダイレクトなどのエントリを含めることができない理由です。)find
sudo
find
sudo
これはしばしば認識されませんが、私の考えでは、コマンドがシェル以外のものによって実行されたときの状況を理解するには、それを理解することが重要です。
単純なシェルコマンドです。これは単一の文字列(個々の文字列のリストであった以前の文字列とは異なります)であり、通常はコマンド名と引数(スペースで区切られた)、およびリダイレクトおよび/または環境変数の割り当てなどの他の項目で構成されます。引用符、変数の置換など、さまざまなシェル構文を含めることができます。たとえば:
ls -l /etc >"$outdir/etcfiles.list"
。var=something
これには、変数の割り当て()、シェル組み込みコマンド、関数、エイリアス、および(シェルによる)条件式と算術式など、[[ ]]
最初の2(( ))
つの意味のコマンドに対応しない一部のコンテンツも含まれます。シェルで1行に配置できるすべての項目。技術的には、パイプ、リスト、複合コマンドなどに分けることができます。 ilkkachuが言ったように読んでくださいシェルコマンド言語仕様、セクション2.9 シェルコマンドもっと学ぶ。
私も、完全に一貫した用語を開発または使用する努力は意味がないというイルカチュウの意見に同意します。可能であるとしても、この用語を使用するほとんどの人は違いを完全に理解できず、最終的にはすぐに混乱するでしょう(すべてのシェルを「bash」と呼ぶ人の数を考慮してください)。文脈を通して把握すればよいのです。
ls -l $(echo "$PATH" | tr : " ")
また、パイプに関連する簡単なコマンドなど、状況が少し奇妙になる可能性があります。
答え3
この質問は「コメント」の質問で終わらなければならないようですが、とにかく答えてみましょう。
まず、「コマンド」という用語も同様に簡単に使用しますが、私は一般的に2番目の概念で物事の種類を「ライン」と呼びます。これは最初のポイントを提示します。 「Enter」を押す前に複数のコマンドを入力できるため、2番目の概念の定義に欠陥があります。あなたの例では、;
2つの異なるコマンドを分離します。私はその例が1つのコマンドだとは思わず、2つのコマンドだと思います。パイプ表記は2つのコマンドを「コマンドパイプ」に統合しますが、私はまだそれを単一のコマンドとして考えています。
また、「コマンド」はパイプのような単純な命令であってもよいし、ls
パイプのような複合命令であってもよいと考える。したがって、「コマンド」という用語はどちらの場合も有効です。
要約すると、あなたが投稿した概念が実際に他の用語を保証するのに十分異なるとは思いません。