2016-08-22 5 views
0

logentriesと呼ばれるログ集中プログラムをインストールして設定するシェルスクリプトを作成しようとしています。彼らはあなたのコマンドラインにいくつかの行をコピー&ペーストして、このプロセスを完了するためのウェブサイト上の指示を持っています。これらの正確なbashコマンドをコピーしてシェルスクリプトに貼り付けようとしたので、すべての指示をコピーして貼り付けるのではなく、1つのスクリプトを実行するだけです。ここでシェルスクリプト内でsudo -sを実行する

は私のスクリプトの内容です:

sudo -s 
echo "sudod" 
tee /etc/yum.repos.d/logentries.repo <<EOF 
[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 
EOF 
yum update 
yum install logentries 

スクリプトもその点になっていた場合、私はテストにライン2上のecho文を挿入しますが、私も取得していないスクリプトを実行するとき出力される。私はコマンドラインでできるのと同じように、スクリプト内でsudo -sを使うことはできないと思います。

これらのコマンドライン命令をシェルスクリプトで実行させる方法を知っている人はいますか?次の例のように、あなたのbashを呼び出すために「シェバング」行(最初の行)を追加

答えて

3

シェルスクリプトのすべてのコマンドは、独立して実行されます。スクリプトは子プロセスとしてコマンドを呼び出す親プロセスです。したがって、sudo -sはルートシェルを開く新しいプロセスを作成します。ただし、このプロセスでは後でコマンドを実行することはできません。

ルートシェルからexitを実行すると、エコー出力が表示されます。これは、終了すると、ルートシェルのプロセスが終了するために発生します。

シェルスクリプトにsudo -sを除くすべてのコマンドを記述できます。 chmod +x install_logentries.shで実行可能にします。 (下記の通り)と別の方法としては、< <を使用して、子プロセスとしてコマンドを埋め込むことであるsudo install_logentries.sh

を経由して、それを実行します。

#!/bin/bash 
sudo -s << SCRIPT 
tee /etc/yum.repos.d/logentries.repo <<EOF 

[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 

EOF 
yum update 
yum install logentries 
SCRIPT 
+2

誤植sudoのラインで。私はあなたがsudo-suではなくsudo -sを意味すると思います。 –

1

てみ示しています(それは/bin/bashではないかもしれないとしてあなたbashが置かれている場所を見つけるためにwhich bashを行う)

#!/bin/bash 

sudo -s 
echo "sudod" 
tee /etc/yum.repos.d/logentries.repo <<EOF 
[logentries] 
name=Logentries repo 
enabled=1 
metadata_expire=1d 
baseurl=http://rep.logentries.com/amazonlatest/\$basearch 
gpgkey=http://rep.logentries.com/RPM-GPG-KEY-logentries 
EOF 
yum update 
yum install logentries 

注:sudo -sにパスワードを入力すると、プロンプトが表示されることがあります。

2

私は一般的にEUIDをチェックし、それがゼロではない場合、その後のようなもの:。

if [ $EUID -ne 0 ]; then 
    exec sudo $0 
done 

は(基本的に、それはまだない場合は、rootとして実行するスクリプトを強制「実行」ビットはコントロールがないことを確認しますルート以外のスクリプトには戻ってはいけません)。

2

sudo行を削除し、それをsudo ./scriptとして呼び出すと、必要なものが得られます。

また、個々のコマンドに接頭辞(sudo teesudo yum)を付けることで、スクリプト内でsudoを使用することもできます。

関連する問題