標準入力と引数のどちらにも対応したbourne-shellスクリプト


標準入力が与えられた場合はそちらを行ごとに、そうでない場合は引数をまるまる1行として扱うスクリプトを作ろうとしています。

[code]

    #!/bin/sh
    
    fetch_input () {
        [ -t 0 ] && echo "$1" || cat -
    }
    
    fetch_input "$*" | while IFS= read -r line
    do
        echo "reading: $line"
    done
    
[/code]

標準入力が存在するかチェックするのに上のように`[ -t
0]`を使用すると大抵の場合はうまくいくのですが、インタラクティブシェルで動かすことが前提になるため、sshなどでリモートマシンのスクリプトを動かそうとすると`-t`オプションで仮想端末を用意する必要がでてしまいます。

[code]

    ssh -t remote '/path/to/script.sh foo bar'
    
[/code]

この場合、もっと単純に標準入力と引数のどちらにも対応できるスクリプトを書く方法はありますか？




普通※は引数の有無で判定します。（※例：`cat`） `$#` で引数の数が分かるので↓とか

[code]

    { test $# = 0 && cat || echo "$*"; }
    
[/code]




普通※は引数の有無で判定します。（※例：`cat`） `$#` で引数の数が分かるので↓とか

[code]

    { test $# = 0 && cat || echo "$*"; }
    
[/code]

