如何在bash shell中使用管道?

时间:2017-02-06 06:36:34

标签: linux bash shell pipeline

我有一个文件,我想写一个bash shell来做一些操作但是首先,我需要对它们进行排序并得到输入文件的前10行

我的代码是:

#!/bin/bash

pipe= "${1:-/dev/stdin}" > sort -k2    #----line 4
i=0
while [.....]&&[ $i -lt 10 ] do
....
....
i=$((i+1))
done < "$pipe"                      #----line 15

执行命令是:

cat inputfile | ./e4.sh

但我得到了许可:

./e4.sh: line 4: /dev/stdin: Permission denied
./e4.sh: line 15: : No such file or directory
从我的电脑

我可以看到文件/ dev / stdin

root@CP:/dev# ls
block  kmsg  null  pts     shm     stdin   tty   tty1  urandom
fd     lxss  ptmx  random  stderr  stdout  tty0  tty2  zero

如何正确地做到这一点。 我的意思是排序它并获得前10行。

1 个答案:

答案 0 :(得分:0)

一般来说,一个命令

FOO=BAR BAZ

通过将环境变量FOO设置为值BAR来增强环境中的命令BAZ。

在你的情况下,我们有类似的东西。命令

 pipe= "${1-/dev/stdin}" > sort -k2

将环境变量命名管道设置为空字符串,然后调用存储在$ 1中的程序。如果未设置$ 1,则调用/ dev / stdin。在你的情况下,没有设置$ 1,所以bash尝试执行/ dev / stdin,当然它不能。