Bash - kshスクリプトでbashスクリプトを実行する

Bash - kshスクリプトでbashスクリプトを実行する

私はRHEL 6.7を使用しており、前提条件を確認し、rpmインストールのためにシステムを準備し(製品にまだディレクトリが必要ない場合はディレクトリを作成します)、サービスを停止し、rpmをインストールし、サービスバックアップを実行します。開始するkornシェルスクリプトがあります。 。 rpmをインストールするまで、すべてがうまくいきました。 10rpmのうち6rpmが不完全であり、rpmの設置が中断される。

製品の所有者と話した後、彼らはbashシェルでrpmインストールを実行することを提案しました。そのため、rpmだけをインストールすると、スムーズに実行される小さなbashシェルスクリプトが作成されました。

これで、メインスクリプト全体をbashに変更するのではなく、rpmをkshスクリプトにインストールするbashスクリプトを呼び出しますが、rpmのインストール中に停止します。

この問題の原因が何であるかを調べてください。

kshでrpm installを実行したときのコードです。

rpm --prefix $MOUNTINST -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
$BIN/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out

if_error $? "Installing MQSeries V8.0"

chown mqm:mqm /tmp/MQinstV80.out
if_error $? "Changing ownership of MQinst.out"

 Temporary workaround till IBM gets back with a fix
mkdir $MOUNTINST/logs
chown mqm:mqm $MOUNTINST/logs
chmod 755 $MOUNTINST/logs

以下は、bashスクリプトを実行するためにkshスクリプトを変更した後のコード例です。スタンドアロン実行時に成功します。

#rpm --prefix $MOUNTINST -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
#$BIN/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out

/var/mqm/trace/WMQUNX8000.00/LINUX/MQV8000GA/6/x86_64/install.sh


#if_error $? "Installing MQSeries V8.0"

#chown mqm:mqm /tmp/MQinstV80.out
#if_error $? "Changing ownership of MQinst.out"

# Temporary workaround till IBM gets back with a fix
#mkdir $MOUNTINST/logs
#chown mqm:mqm $MOUNTINST/logs
#chmod 755 $MOUNTINST/logs

ベストアンサー1

私は多くのことを仮定し、あなたの説明に必要な情報がたくさんないか、誤解を招くかもしれません。
私はこれがinstall.shあなたが次のように提供したbashで実行したいスクリプトであると仮定します。

a="/var/mqm/trace/WMQUNX8000.00/LINUX/MQV8000GA/6/x86_64/install.sh"

これが本当なら、次のように呼び出します。

/path/to/bash "$a"

もちろん、install.shにはこのコードがもう一度必要です。 (ため息)

  • 以下のコードのif_error関数でif_errorを実装できるとしましょう。
  • $ binはbinフォルダの値です。例えば/usr/bin
  • あなたはそうですそのような問題はありません
#!/bin/bash
# If bash is not installed in /bin/bash,
# use the correct path above.

bin="/usr/bin"
mountinst='some wild guess of its value'

if_error(){
    if [[ $1 != 0 ]]; then
        shift
        echo "$@"
    fi
}

rpm --prefix $mountinst -ivh $BIN/MQSeriesRuntime_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesSDK_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesServer_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesClient_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesSamples_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesJava_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesJRE_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesMan_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesExplorer_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesAMS_6-8.0.0-0.x86_64.rpm \
$bin/MQSeriesGSKit_6-8.0.0-0.x86_64.rpm 2>&1 | tee /tmp/MQinstV80.out

if_error "$?" "Installing MQSeries V8.0"

chown "mqm:mqm" "/tmp/MQinstV80.out"
if_error "$?" "Changing ownership of MQinst.out"

# Temporary workaround till IBM gets back with a fix
mkdir "$mountinst/logs"
chown "mqm:mqm" "$mountinst/logs"
chmod "755" "$mountinst/logs"

おすすめ記事