总共有多少种方法可以为命令提供输入?

总共有多少种方法可以为命令提供输入?

关于 Linux,我首先注意到的是向命令中输入数据的不同方式,我知道一些,但我不知道总共有多少种。

目前我所知道的方式:

管道:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

从带有文件结束信号的键盘:

sort
>gurken
>zucker
>braunkohle

从文件:

sort foo

HERE 字符串(实际上称为 HERE 文档):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

这是全部还是有更多方法可以做到这一点,为什么有不同的方法,有些方法是多余的吗?

答案1

首先,sort << HERE等等不是此处的字符串。这是一个此处文档。这里的字符串使用<<<运算符。这是在 bash (和其他一些 shell)中。

一般来说,有两种方法。一种是通过标准输入(和重定向),另一种是通过参数。

  1. 标准输入及其重定向

    这是默认连接到终端的流,在其中执行命令并与 fd(文件描述符)1 关联。向终端输入的任何内容都会被输入。尽管它(输入)可以像使用管道|或使用此处文档或此处字符串一样进行重定向。那么输入不是来自终端,而是附加到管道之前的命令的标准输出。不同的 shell 有不同的重定向,因此对于此类别,您应该检查 shell 文档。寻找输入重定向。

  2. 参数

    这就是您的示例中的内容sort foo。调用程序或函数时,您向其传递一个或多个参数。本地文件只是一种可能性。该参数可能包含 URL 或其他内容。这里的选择是无穷无尽的。

总结起来,一般有两种方式:

  • 第一个从应用程序的内部逻辑中抽象出来并在操作系统/shell 级别上操作标准输入,

  • 而第二个则涉及应用程序的内部结构,正是它们基于调用参数作为接口提供了无限的可能性。

对于这两种方式,答案都是没有限制。尽管实际的限制来自操作系统/外壳和应用程序本身。

答案2

至少有以下几点:

  1. 命令选项:foo --bar

  2. 标准输入:foo | barbar < foo

  3. 文件:(foo *.*或通过 中的代码打开文件foo)†

  4. 环境输出:export foo=bar; baz

  5. 环境(无出口):foo=bar bazenv foo=bar baz

  6. 这里文档:foo << EOF bar EOF

  7. 这里的字符串:foo <<< bar

  8. 信号kill -SIGUSR1 $procid

  9. 种类齐全进程间通信,如套接字、TCP、内存映射文件

† 是的,我意识到 stdin 是一个文件(或类似文件)。像这样传入文件实际上与传入选项相同

相关内容