すみません、シェル初心者なのですが、急を用してまして質問させて頂きました。

シェルスクリプトで
コマンドを実行する前に他のユーザにスイッチしてから
実行するというのを実現したいのですが・・・

#!/bin/csh

コマンド1
コマンド2
・・・

とコマンド1の前に
su コマンドを実行させたいのですが、
パスワードを入力する際、対話式なので
どう書いてよいか分かりません。

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

No2です。



私も遅くなりました。
状況として許されるならば,最初にroot権でスクリプトを実行し,root権が必要ないスクリプト(コマンド)は
一般ユーザに切り替えて実行すれば良いと思います。

スクリプトが二つあったとしてroot権で実行するのがA.sh
一般ユーザ権で実行するのがB.shとすると

まずA.shをroot権で実行します。
で,一般ユーザ権で実行させたい部分(B.sh)をA.shの中で
実行すればよいのですが下記方法で実行して下さい。
--
su - $一般ユーザアカウント -c './B.sh'
--

rootから一般ユーザになる分にはパスワードの入力がいらないのでパスワードを渡さず,rootと一般ユーザの権限切替ができると思います。

--部分解説--
su - $一般ユーザアカウント -c './B.sh'

su - $一般ユーザアカウント
⇒なりたいアカウントの環境を引き継いでユーザ変更を実施する。
su -c './B.sh'
⇒-cの後に続くコマンドをユーザ変更をして実行する。但し,一回限り。


以上で説明になってますか?
    • good
    • 1
この回答へのお礼

回答ありがとうございます!
教えて頂いたとおりにやったらできました!
勉強になりました。
ありがとうございます。

お礼日時:2005/04/13 13:20

方法が幾つかあるのですが,もう少し情報を下さい。



1.シェル実行の際にパスワードを入力する必要があるか?
(パスワードを引数として入れるかどうか)
#セキュリティ上芳しくない

2.別途回答がありましたが,sudoコマンドが使える環境であるか?

3.実行したいシェルスクリプトは一般ユーザ権限かroot権限か?

以上教えて頂ければと思います。

この回答への補足

すみません、質問にお答えするのが遅くなりました。

1.シェル実行時にはパラメータは渡しますが、パスワードは渡しません。

2.sudoはスクリプトを実行したい環境では使われていないようなので、できれば避けたいといった感じです。

3.実行したいスクリプトは一般ユーザなのですが、
途中、root権限で実行させたいスクリプトがあります。

こんな回答で解りますでしょうか?

補足日時:2005/04/11 11:06
    • good
    • 0

OSが何かわからないので完全な回答はできませんが、


「sudo」というコマンドを調べてみてください。

# man sudo

一般的な説明は↓こちらにも。

参考URL:http://www.atmarkit.co.jp/fsecurity/rensai/unix_ …
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
回答どうもありがとうございました。

お礼日時:2005/04/13 13:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q環境変数とシェル変数

UNIXのシェルスクリプトで使用するシェル変数と環境変数とはどういった違いがあるのでしょうか?どのように使い分ける必要があるのでしょうか?また、このような使い方をすると間違いがおこりやすいといった具体的な例など教えていただければ助かります。

Aベストアンサー

環境変数はforkした子プロセス(及び子シェル呼び出し)に引き継がれ、呼ばれた子プロセスはそれらを参照する事が出来ますが、シェル変数は子プロセスには引き継がれません。

子プロセスが親からの情報を受け取って何かしたい時に環境変数を使います。

Qシェルスクリプトでバックグラウンドで実行したコマンドの実行結果を取得するには

OS redhat linux
シェル bornシェル

シェルスクリプトでバックグラウンドで複数のコマンドを実行し、
すべてのコマンドが正常に終了したら次の処理へ進むみたいな事をしたいのですが、可能でしょうか?

直列にすればよいのですが、処理時間短縮の為、並列に処理したいのです。
宜しくお願いします。

Aベストアンサー

バックグラウンドで実行する全コマンドを実行した後、waitコマンドを実行すると良いと思います。
waitコマンド(引数なし)を実行すると、全てのバックグラウンドのコマンドの終了を待ちます。

Q標準入力からシェル変数及び環境変数に値を設定する(bash)

標準入力からシェル変数及び環境変数に値を設定する方法で、cshの場合は「set 変数=$<」ということは確認しているのですが、bashの場合はどのようにすればよろしいのでしょうか?ご教授お願いいたします。

Aベストアンサー

普通はreadを使います。readの完了値でEOFも判断できるのがcshの$<に比べた時の利点です。例えば、
while read a
do echo "$a"
done < file
で、cat file と同じことが出来ます。

aを環境変数にしたければexport aするのは普通のシェル変数と同じ。

あと、cshでのset 変数=$< ですが入力行に空白があると意図しない結果になるので、"$<" とした方がいいです。
sh/bash の read だと、read a b c のように空白(正確には$IFSの値のどれか)で区切られた複数のデータを詠むことも出来ます。詳しくは、man bash に書いてあります。

Qシェル(sh)で実行コマンドを標準出力するには

kshでコマンドを実行して結果をファイルにリダイレクトしています。
結果のみファイルに出力され、実行したコマンドを確認することができません。
実行コマンドも一緒にファイルに出力する方法がありましたら教えてください。
なお、実行コマンドをechoするってのはなしで。
多量のコマンドを実行する場合にめんどくさいので。

Aベストアンサー

ksh -x 実行コマンド > ファイル 2>&1
または
ksh -x 実行コマンド 2>&1| tee ファイル

参考URL:http://x68000.q-e-d.net/~68user/unix/pickup?tee

Q他のアカウントの環境変数を読み込ませ、自作シェルを動作させたいです。

複数ファイル収集用のシェルを作成(他人作)、起動しましたが、現在使用できるアカウントではパスが通っていないため、目的のファイルの一部が収集できない状態で困っています。シェルの中身を見ましたがパスの指定がなかったため取得できていない状態でした。シェルの中身を書き換えることは他人様作成の為できませんので、、、他のパスの通っているアカウントの環境変数を読み込んだ後、そのシェルを起動したいのですがコマンド(env?)等やり方を教えてもらえないでしょうか。なお読み込ませたい環境変数はパスだけです。宜しく御願い致します。m(__)m

Aベストアンサー

他人のスクリプトを勝手に書き換えられない -> コピー
して自分のものとして書き換えては?

Qシェルスクリプトでのmysqlコマンド実行

いつもお世話になっております。
MYSQLで、データベースの一覧を出力し
それを上から順にテーブル作成をしたいと考えています。
source コマンドで、ファイルを読み込んで実行したいのですが、
2つ目のfor文に上手く変数を渡せません。

'source $var_ファイル_$i.sql'`
↑これに変数が上手く渡りません。
そのままの値になってしまいます。

どうにか渡す方法はないでしょうか。

#!bin/bash
var=`hostname -a`
for i in `mysql -u root -p -e 'show databases'`
do
for (( cnt = 0; cnt < 11; cnt++ ))
do
echo $var
echo $i
`mysql -u root -p $i -e 'source $var_ファイル_$i.sql'` 1>> $var_ファイル_$i.log 2>&1
echo "$cnt 回目の処理"
done
done
exit 0

いつもお世話になっております。
MYSQLで、データベースの一覧を出力し
それを上から順にテーブル作成をしたいと考えています。
source コマンドで、ファイルを読み込んで実行したいのですが、
2つ目のfor文に上手く変数を渡せません。

'source $var_ファイル_$i.sql'`
↑これに変数が上手く渡りません。
そのままの値になってしまいます。

どうにか渡す方法はないでしょうか。

#!bin/bash
var=`hostname -a`
for i in `mysql -u root -p -e 'show databases'`
do
for (( cnt = 0; ...続きを読む

Aベストアンサー

こうしたらどうなりますか。

"source $var_ファイル_$i.sql"

Qシェルスクリプト 環境変数RS

シェルスクリプト 環境変数のRSの意味を教えていただけますでしょうか?

また、RSの中身を変更すると、どういった違いが発生するか、実際に体感
できる、スクリプトサンプルを頂けましたら助かります。

よろしくお願いいたします。

Aベストアンサー

すみません、勘違いしてました

> RSを空文字にすれば、ファイル全体を1レコードとして読み込みます。

RSを空文字にすれば、「空行までを」1レコードとして読み込みます。

と訂正します。

より詳細には、awkのマニュアルを読むことをお勧めします。日本語訳もあります。

Q自分のPCにIISを入れたときの、配布CGIの !/usr/bin/perl って?

よく無料で配布されている、
掲示板とかの初めの行に !/usr/bin/perl 
をプロバイダにあわせて直してくださいと
記述がありますが、、

自分のPCにIISをインストールして
運用したいとき、自分のPCがプロバイダ(?)
なわけで、どのように設定すればよいのでしょうか?

Aベストアンサー

何でもいいです。
!/usr/bin/perl 
でも
!/usr/local/bin/perl 
でも。
元々これはLinuxサーバ上での法則のようで、Windows上では無視されるようですよ。

参考URL:http://www.lira.co.jp/t-room/xp_server/

QApache2で子プロセスのシェルの環境変数を設定したい

はじめまして、お世話になります。
先ほどまでSolarisの方で質問をしていたのですが、どうにも過疎のようでしたので、改めてこちらで質問させていただきます。よろしくお願いします。

現在Solaris10の上にApache2を載せ、そのうえでとあるPHPプログラムを動かしているのですが、そのプログラムの機能の拡張を施そうとしたところ、動作がうまくいかなくて困っています。
問題点を調べた結果、そのプログラムが呼び出しているプログラム(ImageMagickのconvert)が動作するために環境変数の設定が必要なのに、それが設定されていないということが原因であるようでした。
そこで質問なのですが、Apache2の子プロセスで使用される(シェルの)環境変数を設定するにはどのようにしたら良いのでしょうか?

サーバに不慣れな上、Solarisに触るのも初めてで、おまけにシェルが単なるshのためますます設定が分かりません。
ちょっとしたことでも構いませんので、どうか知恵をお貸しください。

Thanks in Advance.

Aベストアンサー

PHPはよく知らんのですが、PHPの中でputenv()関数で環境変数を設定してからconvertを呼び出すのではダメですか?

Qbシェルで実行シェルIDの取得について

bシェルとして作成されているシェルを仮にa.shとします。
echoで、”a.sh 実行開始”のようなメッセージを表示させたいのですが、
シェルID(a.sh)を取得する事は可能でしょうか?

Aベストアンサー

シェルIDというのはプロセス名ということでしょうか。

ずいぶん昔の記憶ですけど...
確か $0 で参照できたと思います。

echo "$0 実行開始 PID:$$"

のようにすれば良かったと思いますけど。記憶違いかも知れない(^^;から実際に試してみてくださいね。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報