我的软件有一个安装脚本,我需要它在 Linux 和 AIX 上运行。
在 Linux 上我可以使用myinstaller.ksh
像这样的包装器:
#!/usr/bin/ksh
script -c myrealinstaller.ksh /var/log/myinstaller.log
但在 AIX 上script
不支持该-c
选项。
如何myrealinstaller.ksh
在脚本创建的分叉 shell 中运行我的程序?
答案1
您可以增强包装脚本来检测操作系统;如果它在 Linux 上运行,则执行script -c ...
,但如果它在 AIX 上运行,则为 script-shell 提供一个仅运行您的安装程序的覆盖配置文件,然后退出:
$ cat myinstaller.ksh
#!/usr/bin/ksh
case $(uname -s) in
(Linux)
script -c myrealinstaller.ksh /var/log/myinstaller.log
;;
(AIX)
printf "ENV= ./myrealinstaller.ksh\nexit\n" > ./installer.profile
trap 'rm -f ./installer.profile' INT
ENV=./installer.profile script -q ./var/log/myinstaller.log
rm ./installer.profile
;;
esac
我调整了脚本和日志的路径以在本地测试它。涉及的其他因素是:
- 设置
ENV
为指向我们调用时覆盖的配置文件script
- 打电话
script
让-q
气氛安静一点 - 重要的,取消设置ENV 在调用真正的安装程序期间,这样我们就不会无限循环
- 安装程序完成后告诉覆盖的配置文件立即退出
myrealinstaller.ksh 示例如下:
#!/bin/ksh
echo Hi, I am the real installer
./var/log/myinstaller.log 的内容是:
Script command is started on Thu Mar 15 09:34:04 2018.
Hi, I am the real installer
Script command is complete on Thu Mar 15 09:34:04 2018.