0

私はルートユーザーであり、シェルスクリプトでSQLスクリプトを実行するよりもユーザーをOracleに変更したいので、次のことを試しました;

#!/bin/sh

portStatus=`lsof -ni:5060`
if [ ${#portStatus} -ne 0 ]
  then
    sudo -u oracle << EOF
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql;
    EOF
  else
    exit
fi

次のエラーが表示されます。

./deneme2.sh: syntax error at line 12: `end of file' unexpected

何が問題なのか教えてください。

ありがとう、ハリット

4

3 に答える 3

1

here ドキュメントを使用する場合、終了文字列は行頭になければなりません!

試す

#!/bin/sh

portStatus=`lsof -ni:5060`
if [ ${#portStatus} -ne 0 ]
  then
    sudo -u oracle << EOF
    /oracle/product/102/db/bin/sqlplus -s a513s6p4/a513s6p4 @/oracle/product/102/db/GW_EP_List.sql;
EOF
  else
    exit
fi
于 2013-06-05T10:51:43.340 に答える
0
sudo -u oracle /oracle/product/102/db/bin/sqlplus -s a513s..........

ここでは EOF は必要ありません。sqlplus上記のようにコマンドを実行します。この場合、oracleユーザーはユーザーでなければなりませんsudo

oracle通常のユーザーの場合

su - oracle -c "/oracle/product/102/db/bin/sqlplus -s a513s.........."

suコマンドについてもう少し(man ページから):

su コマンドは、ログイン セッション中に別のユーザーになるために使用されます。ユーザー名を指定せずに su を起動すると、デフォルトでスーパーユーザーになります。オプションの引数 - は、ユーザーが直接ログインした場合にユーザーが期待するものと同様の環境を提供するために使用できます。ユーザー名の後に追加の引数を指定できます。その場合、それらはユーザーのログイン シェルに指定されます。特に、引数 -c を指定すると、次の引数がほとんどのコマンド インタープリターによってコマンドとして扱われます。コマンドは、対象ユーザーの /etc/passwd で指定されたシェルによって実行されます。

于 2013-01-21T10:58:52.963 に答える
0

使用できますsu。次のコマンドで環境を取得することを忘れないでくださいsu -:

COMMAND="/oracle/product/102/db/bin/sqlplus -s a51... "
su - oracle -c $COMMAND

素敵なオラクル ベース サイトのサンプル 、Automating Database Startup and Shutdown on Linux Post :

case "$1" in
    'start')
        # Start the Oracle databases:
        # The following command assumes that the oracle login 
        # will not prompt the user for any values
        su - $ORA_OWNER -c "$ORA_HOME/bin/lsnrctl start"
        su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
        touch /var/lock/subsys/dbora
        ;;
于 2013-01-21T10:59:58.903 に答える