0. Contents
1. Concept
2. Script Source
3. How to Use
#! /usr/bin/env bash
function spl(){
## 変数をセット
local File Path Str Pager="${PAGER:-less}"
declare -i {D,L}Num=0
declare -a List
## 引数をチェック
while (( $# > 0 )) ; do
case "$1" in
-l|--line)
[ "$2" -gt 0 ] 2>&- && DNum=$2
;;
-p|--pager)
type -p "$2" 1>&- && Pager=$2
;;
*)
if [[ -r "$1" ]] ; then
List[${#List[@]}]=$( < "$1" )
else
List[${#List[@]}]=$1
fi && shift && continue
;;
esac && shift 2 || {
echo "error: $FUNCNAME: $1: Invalid option." 1>&2
return 1
}
done
## 変数をチェック
## $File
if (( ${#List[@]} > 0 )) ; then
File=$( for i in "${List[@]}" ; do echo "$i"; done )
elif [[ -t 0 ]] ; then
echo "error: $FUNCNAME: No argument." 1>&2
return 1
else
File=$( cat - )
fi
## $LNum (表示行数)
LNum=$( echo -n "$File" |grep -c '' )
(( LNum > 0 )) || {
echo "error: $FUNCNAME: No entry." 1>&2
return 1
}
## $DNum (端末の行数)
(( DNum > 0 )) || DNum=$[ $( stty 'size' < '/dev/tty' |cut -d ' ' -f 1 ) - 2 ]
## メインルーチン
if (( LNum > DNum )) ; then
echo "$File" |${Pager}
else
echo "$File"
fi
}
spl "$@"
|
- 引数で与えられたファイルを読み込む。
- 読み込めない場合は文字列と扱い、そのまま表示
- 引数が無い場合はパイプラインから受け取る
- パイプが無い場合はヒア・ドキュメントから受け取る
- それでも空ならエラーを出力して終了
USAGE、OPTION は以下の通り。
USAGE: spl (Options) (File)...
-l, --line [Num]
: set lines (default: stty size)
-p, --pager [Pager]
: set pager command (default: $PAGER)
|