Ich muss in der Lage sein, in eine Variable zu schreiben, ob der Test für ein grep entweder WAHR oder FALSCH ist, damit ich ihn später verwenden kann
Für die folgenden, wenn ich laufe
defaults read com.apple.Finder | grep "AppleShowAllFiles"
Auf meinem System würde es zurückkehren
AppleShowAllFiles = FALSE;
Cool. Also möchte ich diese Antwort jetzt an einen Test weiterleiten. Hier bleibe ich hängen.
Ich denke, wenn ich diese Ausgabe einer bestimmten Variablen zuweisen/zuordnen kann, wäre ich in der Lage, einen Test darauf durchzuführen. Sagen Sie jetzt einfach, ich habe den Wert dieser Ausgabe einer Variablen zugewiesen, in diesem Fall werde ich sie $ASAF
als meine Variable verwenden, ich kann sie in einem Test wie diesem ausführen
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
Wenn es eine andere Möglichkeit gibt, dies zu tun, wäre ich mehr als offen für Optionen. Ich musste so etwas schon lange nicht mehr machen und bin etwas ratlos. Ich habe Google ein bisschen durchsucht, aber es waren alles Antworten ohne Erklärungen und unter Verwendung des Rückgabewerts von 0
oder 1
. Ich denke, die zurückgegebene Ausgabe, die einer Variablen zugewiesen wird, wäre angemessener, da ich sie dann bei Bedarf immer wieder im Skript verwenden kann.
Sie müssen grep
überhaupt nicht verwenden:
[[ $(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
gibt boolesche Werte als 1
oder aus 0
. Zum Beispiel True
oder YES
als String wird ebenfalls als boolescher Wert interpretiert, gibt aber -bool true
an, dass der Wert tatsächlich boolesch ist.
Versuchen
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
$(...)
führt den Teil dazwischen aus ()
und ersetzt ihn durch das Ergebnis. Könntest du also auch machen
ASAF=$(defaults read com.apple.Finder | grep "AppleShowAllFiles")
das Ergebnis zuweisen $ASAF
.
PS: Ich habe auch zwei andere Dinge in deinem Skript geändert
[[
für den Testteil verwenden (hat mehr Funktionalität als [
und ist in bash eingebaut==
( =
nur für Zuweisungen)defaults write.com.apple
weiter einrücken lassen als die Zeilen darüber und darunter? Ich habe versucht, das für die Formatierung von Werten zum Laufen zu bringen, und es ist fehlgeschlagen. :-/>
ist zum Zitieren, 4 Leerzeichen sind für Code :-)foofoo=$(defaults read com.apple.foobar | grep "foo")
. Ich werde Ihre Methode in Zukunft verwenden. Es wirkt stabiler.=
kann auch für Vergleiche innerhalb [[
und [
/ test
in bash verwendet werden. POSIX definiert =
, aber nicht ==
(aber POSIX definiert [[
auch nicht).
Danijel-James W
TRUE
oder-FALSE
Werte einer Antwort. Noch besser alsgrep
testen. Danke schön!