2005年09月07日

VineLinux:kshを使う(その2)

以前にご紹介したpdkshですが、どうも動きがおかしいです。いや不安定と言うべきか。
例えば、こんなスクリプトを動かしてみます。
#!/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

pipe(ここでは名前付きパイプ)から1行読み出すとEXIT_FLGは1になってシェルは終了するはずなんですが、何故か内側のループを抜けた瞬間にEXIT_FLGが0に戻ってしまうんです。
あとはファイルテストコマンドの否定がうまく動かなかったり。こっちは動くソースと動かないソースがあったりするので非常に困ったちゃんです。
if [[ ! -r file ]]
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だってのをすっかり忘れていましたよ…。_| ̄|○
posted by 月水和尚 (とも) at 10:14 | Comment(3) | TrackBack(0) | Linux(ディストリビューション固有)
この記事へのコメント
すいません、当方OpenBSDのインストール厨なのですが、デフォルトのログインシェルがkshなのですが、日本語が通りません(仕方なくbashです)、どんな設定をすればよいのでしょうか? お教え願えれば幸いです。
Posted by dd at 2009年01月02日 00:12
お返事が遅れてしまい申し訳ございません。

日本語を通すために特に設定は必要なかったと思います。

日本語が通るかどうかは、kshの仕様というよりはそのバイナリがダブルバイトを意識してビルドされているかどうかに影響されると思います。私が利用したAT&Tのバイナリでは問題なく使えましたが、OpenBSDのバイナリで使えるかどうかはちょっと分かりません。
Posted by tomo at 2009年01月27日 17:31
教えていただいてありがとうございます。thoe御大の考え方だと多分、いや絶対、ksh on OpenBSD never recognise 2byte language でしょう。ビルドしなおすか、デフォルトのシェルなのであまり手を加えたくないので別名でビルドするか…、まだそんなレベルすら行っていないので、bashで我慢します。
Posted by dd at 2009年01月27日 22:25
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。