Salida de grep a una variable

4

Necesito poder escribir si la prueba para un grep es VERDADERO o FALSO en una variable para poder usarla más adelante

Para lo siguiente, si ejecuto

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

en mi sistema, volverí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 específica, podría realizar una prueba en ella. Ahora, solo digamos, 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 manera de hacer esto, estaría más que abierto a las opciones. No he tenido que hacer algo como esto por un tiempo, y estoy un poco perpleja. Busqué un poco en Google, pero fueron todas las respuestas sin explicaciones y usando el valor de retorno de 0 o 1 . Creo que la salida devuelta que se asigna a una variable sería más apropiada, ya que entonces puedo usarla una y otra vez en el script según sea necesario.

    
pregunta Danijel-James W 28.09.2013 - 16:32

2 respuestas

4

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 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.

    
respondido por el user495470 28.09.2013 - 20:13
3

Probar

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 la reemplaza con el resultado. Así que también podrías hacer

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

para asignar el resultado a $ASAF .

PS: También cambié otras dos cosas en tu script

  • use [[ para la parte de prueba (tiene más funcionalidad que [ y está integrado en bash
  • use == para comparar cadenas ( = es solo para tareas)
respondido por el nohillside 28.09.2013 - 16:38

Lea otras preguntas en las etiquetas