2016-05-15 66 views
0

我有一個bash腳本,我想要擴展以支持管道json。Bash腳本支持管道數據輸入它

例子:

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,它不處理每一行。

我該如何支持所有管道的情況?

回答

0

如果你想表現得像cat,爲什麼不使用它?

#! /bin/bash 
value="$(cat "[email protected]")" 
+0

爲什麼'「$ @」'?不是'value =「$(cat)」'OP需要什麼? – Jahid

+0

使用$ @,它既可以使用也可以不使用文件名參數。 – choroba

1

以下工作:

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

訣竅是使用+=並檢查! -t 0,檢查如果我們的管道。