5 votos

Bash: ¿Formas elegantes de usar múltiples variables para acortar cadenas largas?

Soy consciente de dockutil en homebrew pero, estoy tratando de ejecutar un script en bash que agrega automáticamente los iconos del dock para el dock en una nueva cuenta de usuario. dockutil ha sido que no coopera en recién salido de la caja se instala:

#!/bin/bash
#add items to dock
x="defaults write com.apple.dock persistent-apps -array-add "
y='"<dict><key>tile-data</key><dict><key>file-data</key<dict><key>_CFURLString</key><string>/Applications/'
z='</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"'
f="$x"$y
eval $f\Google Chrome.app$z;
eval $f\Safari.app$z;
eval $f\Firefox.app$z;
eval $f\Messages.app$z;
eval $f\Slack.app$z;
eval $f\Microsoft Outlook.app$z;
eval $f\Microsoft Word.app$z;
eval $f\Microsoft Excel.app$z;
eval $f\App Store.app$z;
eval $f\System Preferences.app$z;
eval $f\zoom.us.app$z;
echo "DOCK ICON REORGANIZATION COMPLETE...";
killall Dock; sleep 1;
eval clear;
exit 0

El guión está muy bien, pero me pregunto si hay una solución más elegante a la concatenación de las variables x e y, juntos en 'f', o si hay una manera de combinar los tres, x,y y z, en una variable que me va a permitir la entrada de 'AnyApp.la aplicación' en el medio. De entrada apreciado, gracias!

5voto

Nate Puntos 220

Almacenar partes de comandos en variables y / o usar eval es una buena manera de obtener problemas de análisis extraños. En su lugar, usaría una función de shell:

 addDockApp() {
    defaults write com.apple.dock persistent-apps -array-add \
        "<dict><key>tile-data</key><dict><key>file-data</key<dict><key>_CFURLString</key><string>/Applications/$1</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"
}

addDockApp "Google Chrome.app"
addDockApp "Safari.app"
...etc
 

Alternativamente, puede escribirlo como un bucle e iterar sobre la lista de aplicaciones para agregar:

 for app in "Google Chrome.app" "Safari.app" "Firefox.app" "Messages.app" \
    "Slack.app" "Microsoft Outlook.app" "Microsoft Word.app" "Microsoft Excel.app" \
    "App Store.app" "System Preferences.app" "zoom.us.app"
do
    defaults write com.apple.dock persistent-apps -array-add \
        "<dict><key>tile-data</key><dict><key>file-data</key<dict><key>_CFURLString</key><string>/Applications/$app</string><key>_CFURLStringType</key><integer>0</integer></dict></dict></dict>"
done
 

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