web-dev-qa-db-ja.com

ファイルを非表示/表示するBashスクリプト

非表示のOSXファイルの表示を切り替えるための小さなbashスクリプトを用意しました。

if (defaults write com.Apple.Finder AppleShowAllFiles FALSE); then
    defaults write com.Apple.Finder AppleShowAllFiles TRUE
Elif (defaults write com.Apple.Finder AppleShowAllFiles TRUE); then
    defaults write com.Apple.Finder AppleShowAllFiles FALSE
fi

killall Finder

隠しファイルが非表示の場合、スクリプトはそれらを正常に表示しますが、その後、スクリプトを再実行して隠しファイルを再度非表示にすると、失敗して何も実行されません。

どこが間違っているのですか?

1
Can Sürmeli

if条件では、writeではなくdefaults readコマンドを使用する必要があります。それ以外の場合、結果は常にtrueになり、もちろんElifは実行されません。

また、それはif条件の構文ではありません。次を使用する必要があります。

if [ $(command) == "TRUE" ]; then

しかし、この場合、おそらくこのようなものはそれほど冗長ではないでしょう:

STATUS=$(defaults read com.Apple.Finder AppleShowAllFiles)
case "$STATUS" in
    "TRUE") OPTION="FALSE" ;;
    "FALSE") OPTION="TRUE" ;;
esac
defaults write com.Apple.Finder AppleShowAllFiles $OPTION

killall Finder
5
Paulo Almeida