Re: [Q]引数指定でも標準入力でも同様の動作をさせたい場合
こんにちは。筑波大学の新城です。
In article <cg7mlf$kgl$1@newsl.dti.ne.jp>
"Anonymous Buddha" <gobtma@yahoo.co.jp> writes:
> csh でスクリプトを書いたのですが、引数指定でも標準入力でも同様の動作をさせ
> たい為に、再起呼び出しを利用してみました。スクリプトが test.sh として、以下
> のような感じです。
普通は、その表現だと cat みたいに、
・複数引数があれば複数のファイル
・引数がなければ標準入力
という意味になります。それなら、
cat $* | ...
として、cat でまとめます。でもちょっと違うかも。
> 引数の場合と標準出力の場合に似たような動作をするものは、コマンド類
> でも色々ありますが(wc,ls等)、どのように実装されているのでしょうか?
wc は、cat と同じで引数をファイル名と見なして動作します。
ls は、引数がなければ、"." が与えられたと見なして動作します。
> #!/bin/csh/
> if ($#argv > 0) then
> while ($#argv > 0)
> set BUFF = $argv[1]
> echo $BUFF | test.sh
そういう話なら、次のどれかにするのがよいでしょう。
(1) シェル・スクリプトとしては引数専用にする。標準入力から与
えたくなった時には、xargs か `cat` を使う。
(2) シェル・スクリプトとしては、標準入力専用にする。引数で与
えられてしまったものは、echo arg1 arg2 .. | で呼び出す。
でもなあ、この間こんな Ruby スクリプト書いたばかりでした。
if( ARGV.length == 0 )
$stdin.each_line {|i|
i.chomp!
f( i )
}
else
ARGV.each { |i|
f( i )
}
end
\\ 新城 靖 (しんじょう やすし) \\
\\ 筑波大学 電子・情報 \\
Fnews-brouse 1.9(20180406) -- by Mizuno, MWE <mwe@ccsf.jp>
GnuPG Key ID = ECC8A735
GnuPG Key fingerprint = 9BE6 B9E9 55A5 A499 CD51 946E 9BDC 7870 ECC8 A735