Necesito poder escribir si la prueba para un grep es VERDADERO o FALSO en una variable para poder usarla más tarde
Para lo siguiente, si corro
defaults read com.apple.Finder | grep "AppleShowAllFiles"
en mi sistema, volvería
AppleShowAllFiles = FALSE;
Fresco. 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 ejecutar una prueba en ella. Ahora, solo diga, asigné el valor de esta salida a una variable, en este caso la usaré $ASAF
como mi variable, puedo ejecutarla 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 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 perplejo. Busqué un poco en Google, pero todas eran 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 puedo usarla una y otra vez en el script según sea necesario.
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
, or YES
as a string también se interpreta como un valor booleano, pero -bool true
especifica que el valor sea realmente booleano.
Intentar
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 intermedia ()
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
.
PD: También cambié otras dos cosas en tu guión.
[[
para la parte de prueba (tiene más funcionalidad que [
y está integrado en bash==
para comparar cadenas ( =
es solo para asignaciones`)defaults write.com.apple
tuvieran una sangría mayor que las líneas de arriba y de abajo? Traté de hacer que eso funcionara para formatear el valor, y falló. :-/>
es para citar, 4 caracteres de espacio son para el código :-)foofoo=$(defaults read com.apple.foobar | grep "foo")
. Usaré tu método en el futuro. Parece más estable.=
también se puede usar para comparaciones internas [[
y [
/o test
en bash. POSIX define =
pero no ==
(pero POSIX tampoco define [[
).
Daniel-James W.
TRUE
oFALSE
de una respuesta. Incluso mejor quegrep
probar. ¡Gracias!