管道在Unix中。实现示例时出错

时间:2018-04-08 19:24:20

标签: linux unix system

我是Unix和Linux的新手。我正在尝试一本来自Adam Hoover,第159-162页的“使用C和Unix进行系统编程”一书的例子。我正在使用Linux Ubuntu。

我想管道两个C代码(夏天|宾果游戏)。

summer.c

/* These styles are not essential to make the code work. They are just for 
   presentation here at Stack Overflow. */
textarea { height:100px; width:40%; float:left; font-size:3pt; }
div { clear:both; }

宾果

<p>Textarea Font Size.</p>

<textarea name="input" id="input" cols="75" rows="10">Hello world</textarea> 
<textarea name="output" id="output" cols="75" rows="10">Hello world</textarea> 
<div>
  <select name="textareafontsize" id="textareafontsize" title="Textarea Font Size">
    <option>3</option>
    <option>5</option>
    <option>8</option>
    <option>10</option>
    <option>12</option>
    <option>14</option>
    <option>15</option>
    <option>18</option>
    <option>20</option>
    <option>24</option>
    <option>30</option>
  </select>
</div>

在Linux终端中,我按照命令操作。

  1. gcc -o summer summer.c

  2. gcc -o bingo bingo.c

  3. 夏天|宾果

  4. 我无法做到,它会出错。

    “目前尚未安装”夏季“节目。

    您可以输入以下命令安装:

    sudo apt install chiark-utils-bin

    没有命令'宾果',你的意思是:

    从包'bing'(宇宙)中命令'bing'

    来自包'bino'(宇宙)的命令'bino'

    bingo:找不到命令“

    夏天和宾果文件正在使用 ./ summer ./ bingo

    但是, ./ summer |宾果不起作用。

    我试过用“&lt;”标准输入或“&gt;”标准出来。 这些都很完美。 但“|”会出错

    任何帮助对学习UNIX都非常有用。

2 个答案:

答案 0 :(得分:1)

选项1:明确指定两个命令

的路径
./summer | ./bingo

选项2:将当前路径添加到PATH,以便找到它们。在bash,您可以执行

export PATH="$PATH:$(pwd)"
summer | bingo

请注意添加&#34;。&#34; PATH并不是最安全的事情,而是实际指定包含summerbingo的路径,或使用pwd明确添加当前文件夹。

答案 1 :(得分:0)

您的Bash shell无法找到程序summer的原因是因为您的工作目录不在路径上。

Bash使用变量PATH来定位程序。您可以通过在shell中执行echo $PATH来查看路径的样子。它看起来像:

user@host:/$ echo $PATH
/usr/local/bin:/usr/bin

当您输入命令时,Bash会检查路径并查看程序中包含的位置(即/usr/local/bin/usr/bin)。它看起来不像其他任何地方(如当前目录)所以如果找不到程序,shell只会返回错误。

如果要在不在路径上的位置执行程序,则需要提供程序的完整路径。这可能是:

/path/to/your/working/directory/summer

在Linux中,每个目录都包含一个引用自身的.。你可以用这个:

./summer

.扩展到当前目录的完整路径。

有时您可能想要在路径中添加位置,例如/opt/bin/home/user/bin,但我不会添加.,这有点笨拙。只需明确引用当前目录中的程序,如./program