Conduci l'output di grep su una variabile

4

Devo essere in grado di scrivere se il test per un grep è TRUE o FALSE in una variabile, quindi posso usarlo in seguito

Per quanto segue, se corro

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

sul mio sistema, ritornerebbe

AppleShowAllFiles = FALSE;

Cool. Quindi ora voglio sondare questa risposta a un test di qualche tipo. Questo è dove mi blocco.

Penso che se potessi pipe / assegnare questo output a una variabile specificata, sarei in grado di eseguire un test su di esso. Ora, diciamo, ho assegnato il valore di questo output a una variabile, in questo caso userò $ASAF come variabile, posso eseguirlo in un test come questo

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

Se c'è un altro modo per farlo, sarei più che aperto alle opzioni. Non ho dovuto fare qualcosa di simile per un po ', e sono un po' perplesso. Ho visualizzato Google un po ', ma erano tutte risposte senza spiegazioni e utilizzando il valore restituito di 0 o 1 . Penso che l'output restituito assegnato a una variabile sia più appropriato, in quanto quindi posso usarlo più e più volte nello script come necessario.

    
posta Danijel-James W 28.09.2013 - 16:32
fonte

2 risposte

4

Non è necessario utilizzare grep affatto:

[[ $(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 stampa valori booleani come 1 o 0 . Ad esempio True o YES come una stringa viene interpretata anche come valore booleano, ma -bool true specifica il valore per essere effettivamente booleano.

    
risposta data 28.09.2013 - 20:13
fonte
3

Prova

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

$(...) esegue la parte tra () e la sostituisce con il risultato. Quindi potresti anche fare

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

per assegnare il risultato a $ASAF .

PS: ho anche cambiato altre due cose nello script

  • usa [[ per la parte di test (ha più funzionalità di [ ed è incorporato in bash
  • usa == per confrontare le stringhe ( = è solo per le assegnazioni ')
risposta data 28.09.2013 - 16:38
fonte

Leggi altre domande sui tag