vine-users ML アーカイブ



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

  • From: 長南洋一 <cyoichi@xxxxxxxxxxxxxxx>
  • Subject: [vine-users:071608] Re: 端末か らの入力をすべて
  • Date: Wed, 20 Apr 2005 16:55:28 +0900 (JST)
長南です。

# 同じ話題が続いている間は、スレッドをつなげておいてください。

NIDA さんのメールを誤読しているような気もするのですが……。

NIDA さんのメールより [vine-users:071604]
>
> 形としては、たとえば端末から
> "検索、キーワード, ~/txt"
> と入力した場合は、
> "検索、キーワード, ~/txt"
> を引数にして ~/bin/hoge.pl を呼び出して、hoge.pl の中から、
> "~/bin/kensaku.pl キーワード ~"
> を 呼び出す、...というような感じです。
> # 区切り文字には、"、", ",", " " などを使います。

「検索」「時刻合わせ」「アップロード」、どう打ち込もうと、hoge.pl を
呼び出したいということですね。

面白いことをお考えになっていると思います。しかし、コマンドラインの
最初の単語はコマンド名でしょう(if のようなキーワードや変数名である
こともありますけれど)。つまり、「検索」であれ、「時刻合わせ」であれ、
「アップロード」であれ、コマンドラインの最初にそう打ち込めば、そういう
名前のコマンドが実行されてしまう。

そこで、「検索」「時刻合わせ」「アップロード」という、どの名前でも
hoge.pl を実行したいのなら、hoge.pl を「検索」「時刻合わせ」などの
リンク先とし、呼び出された名前によって別のプログラムを実行するように
hoge.pl を作ればよさそうです。

シェルスクリプトによる簡単な例:
  $ ln -s hogehoge 検索
  $ ln -s hogehoge 時刻
  $cat hogehoge
  #!/bin/sh

  cmd=${0##*/}

  if [ $cmd = "検索" ]
  then
          echo "検索です"
  elif [ $cmd = "時刻" ]
  then
          echo "時刻合わせです"
  else
        echo "hogehoge です"
  fi


> 今のところ、
> alias 検索='~/bin/kensaku.pl'
> として、
> kensaku.pl を呼び出し、STDIN から
> "キーワード、~"
> というようにパラメータを渡しているんですが、
> "検索、キーワード, ~/txt"
> というようにコマンドとパラメータを 1 度の入力でできるなら、
> そっちの方がはやいかなと。

この例だけなら、コマンドラインの引数を利用するように kensaku.pl を書いて
おけばすむのではないでしょうか。

# 区切り文字の方はわかりません。上の例なら、「キーワード」以降は
# perl スクリプトの方で処理すればよいでしょうが、コマンド名の
# 「検索」と引数の間の区切りを空白以外にするにはどうすればよいのか。
# 区切りは「空白、タブ」にしておくのが、一番無難だと思いますが。

-- 
長南洋一