Bash - 从 ksh 脚本中运行 bash 脚本

Bash - 从 ksh 脚本中运行 bash 脚本

我使用的是 RHEL 6.7,有一个 korn shell 脚本,它会检查先决条件、为 rpm 安装准备系统(如果产品还没有需要的话,则创建目录)、停止服务、安装 rpm 并启动服务备份。在安装 rpm 之前一切都运行良好。 10 rpm 中的 6 rpm 不完整,然后 rpm 安装挂起。

与产品负责人交谈后,他们建议我们在 bash shell 中运行 rpm 安装。所以我做了一个小的 bash shell 脚本,只需 rpm 即可安装,并且运行顺利。

现在,我不是将整个主脚本更改为 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

这是在 ksh 脚本中进行更改以运行 bash 脚本后的代码示例,独立运行时成功

#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"

相关内容