4 votos

Enviar la salida de grep a una variable

Necesito poder escribir si la prueba de un grep es TRUE o FALSO a una variable para poder usarla después

Para lo siguiente, si ejecuto

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

en mi sistema, devolvería

AppleShowAllFiles = FALSE;

Genial. Así que ahora quiero canalizar esta respuesta a una prueba de algún tipo. Aquí es donde me quedo atascado.

Creo que si puedo canalizar/asignar esta salida a una variable especificada, podría realizar una prueba con ella. Ahora, digamos que he asignado el valor de esta salida a una variable, en este caso usaré $ASAF como mi variable, puedo ejecutarlo en una prueba como esta

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

Si hay alguna otra forma de hacerlo, estaría más que abierto a las opciones. Hace tiempo que no tengo que hacer algo así y estoy un poco perplejo. He buscado un poco en Google, pero todo eran respuestas sin explicaciones y utilizando el valor de retorno de 0 o 1 . Creo que sería más apropiado asignar la salida devuelta a una variable, ya que así puedo utilizarla una y otra vez en el script según sea necesario.

4voto

Fuzzy Purple Monkey Puntos 702

No es necesario utilizar grep en absoluto:

[[ $(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 los valores booleanos como 1 o 0 . Por ejemplo True o YES como una cadena también se interpreta como un valor booleano, pero -bool true especifica que el valor sea realmente booleano.

3voto

Prueba con

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

$(...) ejecuta la parte entre () y lo sustituye por el resultado. Así que también podría hacer

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

para asignar el resultado a $ASAF .

PD: También he cambiado otras dos cosas en tu script

  • utilice [[ para la parte de pruebas (tiene más funcionalidad que [ y está incorporado en bash
  • utilice == para comparar cadenas ( = es sólo para asignaciones`)

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