【问题标题】:Bash script support piping data into itBash 脚本支持将数据管道传输到其中
【发布时间】:2016-05-15 21:15:55
【问题描述】:

我有一个 bash 脚本,我想扩展它以支持将 json 管道导入。

例子:

echo '{}' | myscript store

所以,我尝试了以下方法:

local value="$1"

if [[ -z "$value" ]]; then
  while read -r piped; do
    value=$piped
  done;
fi

这在上面的一个简单案例中有效,但是这样做:

cat input.json | myscript store

只获取文件input.json的最后一行,并不处理每一行。

如何支持所有管道情况?

【问题讨论】:

    标签: bash shell unix pipe


    【解决方案1】:

    以下作品:

    if [[ -z "$value" && ! -t 0 ]]; then
        while read -r piped; do
          value+=$piped
        done;
    fi
    

    诀窍是使用 += 并检查 ! -t 0 以检查我们是否正在管道。

    【讨论】:

      【解决方案2】:

      如果你想表现得像cat,为什么不使用它?

      #! /bin/bash
      value="$( cat "$@" )"
      

      【讨论】:

      • 为什么是"$@"value="$(cat)" 不是 OP 需要的吗?
      • 使用 $@,它可以在有和没有文件名参数的情况下工作。
      猜你喜欢
      • 2016-09-20
      • 1970-01-01
      • 2015-03-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-28
      • 1970-01-01
      • 2012-02-29
      • 2017-01-15
      相关资源
      最近更新 更多