bash-从stdin和参数中读取文件

时间:2015-10-09 01:58:15

标签: bash stdin

所以我用谷歌搜索了这个并认为我找到了答案,但它仍然不适用于我。

该程序计算数字文件中行和列的平均值和中位数...

使用文件名有效:

./stats -columns test_file

使用cat不起作用

cat test_file | ./stats -columns

我不确定为什么它不起作用

#file name was given 
if [[ $# -eq 2 ]]
  then
      fileName=$2
  #file name was not given
  elif [[ $# -eq 1 ]]
  then
      #file name comes from the user
      fileName=/dev/stdin
  #incorrect number of arguments
  else
      echo "Usage: stats {-rows|-cols} [file]" 1>&2
      exit 1
  fi

1 个答案:

答案 0 :(得分:1)

一个接受管道输入的非常简单的程序:

#!/bin/sh

stdin(){
    while IFS= read -r i
    do   printf "%s" "$i"
    done

}

stdin

测试如下:

echo "This is piped output" | stdin

要将其放入类似于问题中的脚本/实用程序中,您可以执行此操作:

#!/bin/sh

stdin(){
    while IFS= read -r i
    do   printf "%s" "$i"
    done

}
rowbool=0
colbool=0
for i in $@
do case "$i" in
    -rows) echo "rows set"
           rowbool=1
           shift
    ;;
    -cols) echo "cols set"
           colbool=1
           shift
    ;;
   esac

done

if [[ $# -gt 0 ]]
then
     fileName=$1
fi
if [[ $# -eq 0 ]]
then fileName=$(stdin)
fi

echo "$fileName"