Bash - ksh 스크립트에서 bash 스크립트 실행

Bash - ksh 스크립트에서 bash 스크립트 실행

저는 RHEL 6.7을 사용하고 있으며 전제조건을 확인하고, rpm 설치를 위해 시스템을 준비하고(제품에 아직 디렉토리가 필요하지 않은 경우 디렉토리를 생성함), 서비스를 중지하고, rpm을 설치하고, 서비스 백업을 시작하는 korn 쉘 스크립트를 가지고 있습니다. . rpm을 설치하기 전까지는 모든 것이 잘 작동했습니다. 10rpm 중 6rpm이 불완전하고 rpm 설치가 중단됩니다.

제품 소유자와 대화한 후 그들은 bash 쉘에서 rpm 설치를 실행하도록 제안했습니다. 그래서 rpm만 설치하면 원활하게 실행되는 작은 bash 쉘 스크립트를 만들었습니다.

이제 전체 메인 스크립트를 bash로 변경하는 대신 ksh 스크립트에 rpm을 설치하는 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"

관련 정보