我正在尝试在 Linux 上下载并执行 iTMS Apple Transporter 安装程序 shell 脚本。系统提示我接受许可证,但我想将
--accept
参数传递给脚本,这样我就不需要手动接受。
我跑了
wget -O iTMSTransporter_installer_linux_3.2.sh "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/resources/download/public/Transporter__Linux/bin"
然后
./iTMSTransporter_installer_linux_3.2.sh --accept
尽管通过了
--accept
参数,我仍然收到接受许可证的提示。
来自
./iTMSTransporter_installer_linux_3.2.sh
的源代码如下:
initargs="$@"
while true
do
case "$1" in
-h | --help)
MS_Help
exit 0
;;
-q | --quiet)
quiet=y
noprogress=y
shift
;;
--accept)
accept=y
shift
;;
--info)
然后在 PrintLicense() 方法中:
MS_PrintLicense()
{
PAGER=${PAGER:=more}
if test x"$licensetxt" != x; then
PAGER_PATH=`exec <&- 2>&-; which $PAGER || command -v $PAGER || type $PAGER`
if test -x "$PAGER_PATH"; then
echo "$licensetxt" | $PAGER
else
echo "$licensetxt"
fi
if test x"$accept" != xy; then
while true
do
MS_Printf "Please type y to accept, n otherwise: "
read yn
if test x"$yn" = xn; then
keep=n
eval $finish; exit 1
break;
elif test x"$yn" = xy; then
break;
fi
done
iTMSTransporter 由 makeself 打包 https://makeself.io/.
--accept 参数是同意许可证(如果它是 Makeself 的一部分)。然而,Apple 并未使用此功能。因此它只解压缩自解压脚本中的文件并运行其中的另一个脚本。
不幸的是,内部脚本不允许跳过许可证。内部脚本还有更多理论上可以解决的问题(跳过分页、从标准输入强制“是”等)。
出于我们的目的,我们更喜欢使用 Makeself 参数并解压存档。然后我们手动复制 itms 文件夹。我们在docker中使用这个方法。
curl -sSL "https://itunesconnect.apple.com/WebObjects/iTunesConnect.woa/ra/resources/download/public/Transporter__Linux/bin" -o ~/installer_package.sh
chmod u+x ~/installer_package.sh
~/installer_package.sh --noexec --target ~/trasporter_install
rm ~/installer_package.sh
cp -r ~/trasporter_install/itms ~/itms
rm -rf ~/trasporter_install
chmod 555 ~/itms/bin/iTMSTransporter