4 votes

Rediriger la sortie de grep vers une variable

Je dois être capable d'écrire si le test pour un grep est soit TRUE soit FALSE dans une variable pour pouvoir l'utiliser plus tard

Pour ce qui suit, si j'exécute

defaults read com.apple.Finder | grep "AppleShowAllFiles"

sur mon système, cela retournerait

AppleShowAllFiles = FALSE;

Génial. Maintenant je veux rediriger cette réponse vers un test de quelque sorte. C'est là que je bloque.

Je pense que si je peux rediriger/assigner cette sortie à une variable spécifiée, je pourrais exécuter un test dessus. Maintenant, disons, j'ai assigné la valeur de cette sortie à une variable, dans ce cas je vais utiliser $ASAF comme ma variable, je peux l'exécuter dans un test comme ceci

if [ $ASAF = "AppleShowAllFiles = TRUE;" ]; then  
    defaults write com.apple.Finder AppleShowAllFiles FALSE  
    killall Finder  
else  
    defaults write com.apple.Finder AppleShowAllFiles True  
    killall Finder  
fi

S'il y a une autre façon de faire cela, je serais plus qu'ouvert aux options. Je n'ai pas eu à faire quelque chose comme cela depuis un moment, et je suis un peu bloqué. J'ai cherché sur Google un peu, mais ce n'était que des réponses sans explications et en utilisant la valeur de retour de 0 ou 1. Je pense que assigner la sortie retournée à une variable serait plus approprié, car je pourrais l'utiliser encore et encore dans le script autant que nécessaire.

4voto

Fuzzy Purple Monkey Points 702

Vous n'avez pas besoin d'utiliser grep du tout:

[[ $(defaults read com.apple.finder AppleShowAllFiles) = 0 ]] && bool=true || bool=false
defaults write com.apple.finder AppleShowAllFiles -bool $bool
osascript -e 'quit app "Finder"'

defaults read imprime les valeurs booléennes comme 1 ou 0. Par exemple, True ou YES en tant que chaîne est également interprété comme une valeur booléenne, mais -bool true spécifie que la valeur est en fait booléenne.

3voto

nohillside Points 82672

Essayer

if [[ $(defaults read com.apple.Finder | grep "AppleShowAllFiles") == "AppleShowAllFiles = TRUE;" ]]; then
    defaults write com.apple.Finder AppleShowAllFiles FALSE
else
    defaults write com.apple.Finder AppleShowAllFiles True
fi
killall Finder

$(...) exécute la partie entre () et la remplace par le résultat. Vous pourriez donc également faire

ASAF=$(defaults read com.apple.Finder | grep "AppleShowAllFiles")

pour assigner le résultat à $ASAF.

PS: J'ai également modifié deux autres choses dans votre script

  • utilisez [[ pour la partie test (offre plus de fonctionnalités que [ et est intégré dans bash
  • utilisez == pour comparer les chaînes (= est réservé aux affectations uniquement)

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