我正在尝试修改更新Flash的现有脚本,但安装程序不起作用。
我不断收到以下错误。
安装程序:错误的指定包路径无效:"/卷/Flash Player/安装 Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player 安装管理器"。
如果我将其修改为在文件路径的末尾说包含.pkg,它也不起作用。
以下是脚本的其余部分:
#!/bin/sh
# Script to download and install Flash Player.
# Only works on Intel systems.
#
dmgfile="flash.dmg"
volname="Flash"
logfile="FlashUpdateScript.log"
echo "Updating Flash player…"
# Are we running on Intel?
if [ '`/usr/bin/uname -p`'="i386" -o '`/usr/bin/uname -p`'="x86_64" ]; then
# Get the latest version of Flash Player available from Adobe's About Flash page.
latestver=`/usr/bin/curl -s http://www.adobe.com/software/flash/about/ | sed -n '/Safari/,/</tr/s/[^>]*>([0-9].*)<.*/1/p'`
# Get the version number of the currently-installed Flash Player, if any.
if [ -e "/Library/Internet Plug-Ins/Flash Player.plugin" ]; then
currentinstalledver=`/usr/bin/defaults read /Library/Internet Plug-Ins/Flash Player.plugin/Contents/version CFBundleShortVersionString`
else
currentinstalledver="none"
fi
echo "Installed version: $currentinstalledver"
echo "Currently last version to install: $latestver"
# Compare the two versions, if they are different of Flash is not present then download and install the new version.
if [ "${currentinstalledver}" != "${latestver}" ]; then
echo "UPDATING…"
/bin/echo "`date`: Current Flash version: ${currentinstalledver}" >> ${logfile}
/bin/echo "`date`: Available Flash version: ${latestver}" >> ${logfile}
/bin/echo "`date`: Downloading newer version." >> ${logfile}
/usr/bin/curl http://fpdownload.macromedia.com/pub/flashplayer/latest/help/install_flash_player_osx.dmg -o flash.dmg
/bin/echo "`date`: Mounting installer disk image." >> ${logfile}
/usr/bin/hdiutil detach $(/bin/df | /usr/bin/grep Flash | awk '{print $1}') -quiet
/usr/bin/hdiutil attach flash.dmg -nobrowse -quiet
/bin/echo "`date`: Installing..." >> ${logfile}
/usr/sbin/installer -pkg /Volumes/Flash Player/Install Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player Install Manager -target /
/bin/sleep 10
/bin/echo "`date`: Unmounting installer disk image." >> ${logfile}
/usr/bin/hdiutil detach $(/bin/df | /usr/bin/grep ${volname} | awk '{print $1}') -quiet
/bin/sleep 10
/bin/echo "`date`: Deleting disk image." >> ${logfile}
/bin/rm ${dmgfile}
newlyinstalledver=`/usr/bin/defaults read /Library/Internet Plug-Ins/Flash Player.plugin/Contents/version CFBundleShortVersionString`
if [ "${latestver}" = "${newlyinstalledver}" ]; then
/bin/echo "`date`: SUCCESS: Flash has been updated to version ${newlyinstalledver}" >> ${logfile}
echo "SUCCESS: Flash has been updated to version ${newlyinstalledver}"
else
/bin/echo "`date`: ERROR: Flash update unsuccessful, version remains at ${currentinstalledver}." >> ${logfile}
/bin/echo "--" >> ${logfile}
echo "ERROR: Flash update unsuccessful, version remains at ${currentinstalledver}."
fi
# If Flash is up to date already, just log it and exit.
else
/bin/echo "`date`: Flash is already up to date, running ${currentinstalledver}." >> ${logfile}
/bin/echo "--" >> ${logfile}
echo "Flash is already up to date, running ${currentinstalledver}."
fi
else
/bin/echo "`date`: ERROR: This script is for Intel Macs only." >> ${logfile}
echo "ERROR: This script is for Intel Macs only."
fi
您需要确认路径的每个段都具有允许您写入该目录及其下的任何目录的权限。将以下脚本保存到 PATH 中的目录中(/usr/local/bin
合适),或将其保存到 /tmp
目录中并将其与完整路径一起使用。
cat pathChecker.sh
#!/bin/bash
path2chk="${@?usage:${0##*/} /path/to/check}"
if ! [[ -d "${path2chk}" ]] ; then
echo "no directory access to ${path2chk}"
echo "checking all elements anyway"
fi
echo "${path2chk}"
| sed 's///n/g'
| while read pathElem ; do
testPath="${testPath+${testPath}/}${pathElem}"
#dbg echo "ls -ld "$testPath""
ls -ld "$testPath"
done
chmod +x pathChecker.sh
pathChecker.sh '/Volumes/Flash Player/Install Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player Install Manager'
应该显示这样的列表
drwxr-x-r-x ..... /Volumes
drwxr------ ..... /Volumes/Flash Player # bzt!
. . . .
编辑 另请参阅此处对问题的更通用解释:
如何解决 PATH 中的不安全世界可写目录/usr,Ruby 上的模式040777警告?
希斯