2 votos

Secuencia de comandos para comprobar la Versión de Software

Hola estoy tratando de escribir un guión para comprobar la versión de software. Quiero pasar mis propias variables, que son el nombre de la Aplicación y la Versión.

Aquí hay una copia. No es trabajo para mí en la actualidad... soy un novato y estoy bastante seguro de que tiene que ver con la sintaxis.

Cualquier aporte es apreciado.

Gracias, Pablo

#/bin/sh

#Enter the Name of the Application here
ApplicationName=/Applications/FakeApp.app
ApplicationVersionNumber=1.0
echo $ApplicationName

#Check if Directory Exist
if [ ! -d $ApplicationName ]; then
            echo $ApplicationName "is not installed"
            exit 123456
fi
echo $ApplicationName " is installed"

# Check Version
VersionCheck=`cat $ApplicationName/version.plist | grep $ApplicationVersionNumber`
echo $VersionCheck
if [ ${#VersionCheck} != 0 ]; then
echo $VersionCheck
echo $ApplicationName $ApplicationVersion Number "is Installed"
exit 0
fi
echo $ApplicationName $ApplicationVersion Number "is NOT Installed"

exit 1

6voto

0942v8653 Puntos 3617

En realidad sólo hay una sintaxis error que te hizo. Poner un espacio antes del Número en $ApplicationVersionNumber. La mayoría de las aplicaciones no tienen una versión.plist archivo, pero siempre tienen la versión en su Información.plist.

Aquí es una versión fija de la secuencia de comandos con un par de mejoras:

#!/bin/sh

ApplicationName=/Applications/FakeApp.app
ApplicationVersionNumber=1.0
echo $ApplicationName

#Check if Directory Exist
if [ ! -d $ApplicationName ]; then
    echo "$ApplicationName is not installed"
    exit 123456
fi
echo "$ApplicationName is installed"

# Check Version
VersionCheck=`plutil -p "${ApplicationName}/Contents/Info.plist" | grep "CFBundleShortVersionString.*$ApplicationVersionNumber"`
echo $VersionCheck
if [ ${#VersionCheck} != 0 ]; then
    echo "$ApplicationName $ApplicationVersionNumber is Installed"
    exit 0
fi
echo "$ApplicationName $ApplicationVersionNumber is NOT Installed"
exit 1
  • Se utiliza plutil -p en lugar de cat, ya que plutil puede imprimir un agradable, versión legible de la plist, incluso si no está en formato XML.
  • Es greps para la clave (CFBundleShortVersionString), .*, y el valor. Esto es mejor porque no quieres que se active en cosas como LSMinimumSystemVersion.
  • También he añadido más citas porque me gustan las citas y las cosas son (en general) menos probable que se rompa de esa manera.

Yo hubiera escrito algo como esto:

#!/bin/bash
app_path="$1"
desired_version="$2"

#Get the line, regardless of whether it is correct
version_line=$(plutil -p "${app_path}/Contents/Info.plist" | grep "CFBundleShortVersionString")
if [[ $? -ne 0 ]]; then
    version_line=$(plutil -p "${app_path}/Contents/Info.plist" | grep "CFBundleVersion")
    if [[ $? -ne 0 ]]; then #if it failed again, the app is not installed at that path
        echo "$app_path not installed at all"
        exit 123456
    fi
fi
#Some text editing to get the real version number
real_version=$(echo $version_line | grep -o '"[[:digit:].]*"' | sed 's/"//g')
if [ "$real_version" = "$desired_version" ]; then
    echo "$app_path $desired_version is installed"
    exit 0
fi
echo "${app_path}'s version is $real_version, not $desired_version"
exit 1

La ventaja de esto es que se comprueba la versión actual de la cadena, de modo que si pones 1.3 y 1.3.1, informa de que se trata de una versión diferente. $1 y $2 son los argumentos de línea de comandos que se pasan como ./script.sh '/Applications/FakeApp.app' '1.3'

También, el otro cuenta como correcta en 1.1 por 121 porque grep cuenta el . como comodín.

2voto

También puede utilizar AppleScript o defaults:

$ osascript -e 'version of app "TextEdit"'
1.9
$ defaults read /Applications/TextEdit.app/Contents/Info.plist CFBundleShortVersionString
1.9

Usted puede utilizar AppleScript o mdfind encontrar la ruta de acceso de una aplicación:

$ osascript -e 'posix path of (path to app "textedit")'
/Applications/TextEdit.app/
$ mdfind 'kMDItemContentType=com.apple.application-bundle&&kMDItemFSName=TextEdit.app'
/Applications/TextEdit.app

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X