vine-users ML アーカイブ



[vine-users:071645] Re: 端末か らの入力をすべて

  • From: 長南洋一 <cyoichi@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:071645] Re: 端末か らの入力をすべて
  • Date: Sat, 23 Apr 2005 14:45:08 +0900 (JST)
長南です。

# スレッドをつないでくださいというのは、同じ話題が続いている間は、
# メーラの返信機能を使って書いてくださいということです。新しい
# 質問なら、もちろん新規作成で。

「IME で半角の空白が出せるはず」という谷村さんのご意見に賛成です。
それが一番実用的な解決法だと思います。

でも、スクリプトで工夫してみたいのなら――

NIDA さんのメールより [vine-users:071639]
> 
> 知りたいのは、
> 
> "検索" と "キーワード" の間の区切り文字を全角文字で
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> できないか。
> ~~~~~~~~~~~~~
> ということです。

bash では、コマンドラインの区切り記号は半角空白とタブだけのようです
(| や ; などもそこに入れることができますが)。また read の入力の
ような場面でも、区切り記号に全角文字をうまく使えないようです。
そこまで多言語化が徹底していないということでしょう。ですから、
bash のプロンプトから「検索、キーワード、ファイル名」と打ち込んで、
「検索」というコマンドを実行することはできません。そのコマンドが
alias であれ、リンクであれ、たぶん不可能です。

もし、そういったことがしたいのなら、全角文字を区切り記号として扱う
シェルを自作することになります。あるいは、全角文字を区切り記号として
使えるように bash を書き直すか。

藤田さん、谷村さん、そして私が書いたのは、シェルスクリプトを使った
シェルの雛形ですが、谷村さんがお書きになったように、ちょっと手直し
すれば、全角を区切りに使えます。

[vine-users:071631] のスクリプトを書き直してみます。

  $ cat minish
  #!/bin/sh
  while true
  do
          read -p "[minish]> " line
          line=`echo $line |sed -e "s/[、, ,]/ /g"`
          cmd=${line%% *}
          args=`echo $line |sed -e "s/$cmd//"`
          case $cmd in
          検索)
                  eval egrep $args;;
          時刻合わせ)
                  su -c "/usr/sbin/ntpdate ntp.hoge.ne.jp";;
          終了)
                  echo "終了します"
                  exit;;   
          *)
                  eval $line;;
          esac
  done

もちろん、別の書き方もできますし、perl でやることもできます。

-- 
長南洋一