[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[plamo:05878] Re: 文字化けとスクリプトについて



はじめまして。佐藤 喬と言います。

From: yube <yube@mizar.freemail.ne.jp>
Subject: [plamo:05872] 文字化けとスクリプトについて
> 
> スクリプトについて
>  ユーザー変数を入力し、muleで以下のようなコマンドをかきました。
> 設定した変数:usr=yube , grp=office
> #!/bin/sh
> 
> mkdir /home/$usr
> useradd -g $grp -d /home/$usr $usr
> /usr/qmail/bin/・・・・・
> 以下略
> というような感じです。この後chmodで実行権を与えた。
>  setと入力して、ユーザー変数はきちんと設定されていたのですが、以上のス
> クリプトを実行すると,$usr,$grpに何も入ってないように実行されます。

使用している対話 shell はなんでしょうか?
tcsh もしくは bash 等であると仮定して話をすると、
set 内部コマンドで設定される変数はシェル変数です。

このシェル変数は設定した shell でのみ有効となります。
また、スクリプト等の外部コマンドを実行するさいには、
shell が自分の分身をつくり (fork(2)) その分身に外部コマンドを実行させます。
#分身が外部コマンドに化けるといったほうが良いのかも(^^;。
分身が外部コマンドに化けるときにシェル変数は引き継がれません。
ですんで、$usr,$grpには何も入ってないことになります。

一つの解決策としてはシェル変数ではなく環境変数を使うことが挙げられます。

tcsh なら % setenv usr=yube
bash なら $ export set usr=yube

等とします。
環境変数ならば外部コマンドに渡されますので、
スクリプト内で使用できます。

ただ、個人的には環境変数を使って値を受け渡すよりも
引数を使って、
% command usr grp
のようにしたほうが使い勝手が良いかと思います。
--------
佐藤 喬 takochi@din.or.jp
        satou-t@spa.is.uec.ac.jp

Follow-Ups
[plamo:05883] Re: 文字化けとスクリプトについて, yube
References
[plamo:05872] 文字化けとスクリプトについて, yube

[検索ページ] [メール一覧]
Plamo ML 公開システム