5 votes

Bash : Des moyens élégants d'utiliser des variables multiples pour raccourcir les longues chaînes de caractères ?

Je suis conscient de dockutil sur homebrew mais, j'essaie d'exécuter un bash script qui ajoute automatiquement des icônes de dock au dock sur un nouveau compte utilisateur. dockutil n'a pas été coopératif sur les installations fraîchement sorties de la boîte :

#!/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

Le script est bien, mais je me demande s'il y a une solution plus élégante pour concaténer les variables x et y ensemble dans 'f', ou s'il y a un moyen de combiner les trois, x,y, et z, dans une variable qui me permettra d'entrer 'AnyApp.app' au milieu. Merci de votre contribution.

5voto

Gordon Davisson Points 30215

Stockage de parties de commandes dans des variables et/ou utilisation de eval est un bon moyen d'obtenir des problèmes d'analyse bizarre. J'utiliserais plutôt une fonction 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

Vous pouvez aussi l'écrire sous forme de boucle et itérer sur la liste des applications à ajouter :

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

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X