即使input了确切的path,Unix安装程序也找不到文件的path

我正在尝试修改更新Flash的现有脚本,但安装程序无法正常工作。

我不断收到以下错误。

安装程序:错误指定的包path无效:'/ Volumes / Flash Player /安装Adobe Flash Player.app/Contents/MacOS/Adobe Flash Player安装pipe理器'。

如果我修改它在文件path末尾的include.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-xrx ..... /Volumes drwxr------ ..... /Volumes/Flash Player # bzt! . . . . 

编辑另请参阅此处的更通用的问题说明:

如何解决PATH中不安全的可写dir / usr,模式040777 Ruby中的警告?

IHTH