例えば、こんなスクリプトを動かしてみます。
#!/bin/ksh
EXIT_FLG=0
while (( ${EXIT_FLG} == 0 ))
do
cat pipe | while read MSG
do
echo "before $EXIT_FLG"
(( EXIT_FLG=1 ))
echo "after $EXIT_FLG"
done
done
EXIT_FLG=0
while (( ${EXIT_FLG} == 0 ))
do
cat pipe | while read MSG
do
echo "before $EXIT_FLG"
(( EXIT_FLG=1 ))
echo "after $EXIT_FLG"
done
done
pipe(ここでは名前付きパイプ)から1行読み出すとEXIT_FLGは1になってシェルは終了するはずなんですが、何故か内側のループを抜けた瞬間にEXIT_FLGが0に戻ってしまうんです。
あとはファイルテストコマンドの否定がうまく動かなかったり。こっちは動くソースと動かないソースがあったりするので非常に困ったちゃんです。
if [[ ! -r file ]]
then
echo "Fileが読み込めません"
fi
then
echo "Fileが読み込めません"
fi
どうしたもんかと思っていたら、本家本元AT&Tにlinux-i386用のバイナリがフリーで公開されてました。(どうやら昔は商用だったらしいです)
さっそくスタンドアロン版をダウンロードしてみたところ、gz形式のはずなのに何故かgunpipで解凍出来ない。PCでやっても同じ。
困った…と思っていろいろ調べたところ、どうもwgetを使ってダウンロードするとうまく行くらしいと言う事が判明。
まずはwgetを入手。
apt-get install wget
んでもってダウンロード。ユーザ名とパスワードが必要なのでこんな感じ。
(複数行に分かれちゃってますが実際には1つのコマンドです)
wget --http-user "I accept www.opensource.org/licenses/cpl" --http-passwd . http://www.research.att.com/~gsf/download/tgz/ksh.2005-02-02.linux.i386.gz
ちなみにユーザ名とパスワードはここに書いてあります。
あとダウンロードURLはその時の最新のものを指定して下さい。
そしたらダウンロードしたファイルをgunzipで解凍し、出てきたファイルを/bin/kshとしてコピーすれば完了です。(全員に実行権限をつけるのをお忘れなく)
あ、pdkshが導入済みの場合はアンインストールしてからコピーして下さいね。
apt-get remove pdksh
今のところこっちのkshでは特に不具合は出ていません。(本家なんだから当たり前か)
↑日本語も全く問題ありませんでした!私が文字コードを間違えただけ…。
linuxはeucだってのをすっかり忘れていましたよ…。_| ̄|○
日本語を通すために特に設定は必要なかったと思います。
日本語が通るかどうかは、kshの仕様というよりはそのバイナリがダブルバイトを意識してビルドされているかどうかに影響されると思います。私が利用したAT&Tのバイナリでは問題なく使えましたが、OpenBSDのバイナリで使えるかどうかはちょっと分かりません。