-4

Сценарий сам по себе довольно понятен. Можно ли улучшить этот сценарий?

Первая итерация была написана на OS X 10.5.8 Leopard, текущая итерация была запущена на OS X 10.6.4 Snow Leopard с Safari 5.0.2 (6533.18.5). Кроме того, любое освещение относительно того, почему первая строка 'if [-f]' работает, но 'if [-f ~/Library/Safari/LocalStorage/*. Localstorage]' генерирует ошибку? [да, я немного нуб]

Код:

#! /bin/bash
# SafariClear0.0.6

if [ -f ]
then
cat /dev/null > ~/Library/Safari/LocalStorage/*.localstorage
rm -f ~/Library/Safari/LocalStorage/*.localstorage
fi

if [ -f ~/Library/Safari/LocalStorage/*.localstorage ]
then
echo "Oy vey!"  
fi
cd ~/Library/Safari/
cat /dev/null > WebpageIcons.db
cat /dev/null > TopSites.plist
cat /dev/null > LocationPermissions.plist
cat /dev/null > LastSession.plist
cat /dev/null > History.plist
echo "Clear"
exit

2 ответа2

2

Похоже, что это будет закрыто, не знаю почему, может быть, потому что это вопрос программирования на Superuser.

1) тест [-f] не имеет смысла. Тест -f предназначен для проверки того, существует ли файл и существует ли он. Наличие -f без файла ничего не делает.

2) Узнать, что "каталог содержит один или несколько файлов" сложнее, чем кажется на первый взгляд. К счастью, вам не нужно. Смотрите № 3 ниже.

3) Первый фрагмент кода усекает файлы, которые вы затем удаляете. Зачем вообще усекать? Просто удалите их и покончите с этим. Ты можешь сделать:

find ~/Library/Safari/LocalStorage/ -type f -name '*.localstorage' -exec rm -f {} \;

4) Затем вы обрезаете некоторые другие файлы. Это может быть зациклено, что может быть улучшением.

cd ~/Library/Safari/
for FILE in WebpageIcons.db TopSites.plist LocationPermissions.plist LastSession.plist  History.plist
do
    cat /dev/null > $FILE
done

Объединение этих двух фрагментов кода в скрипт делает все, что делает ваш скрипт.

1

В [ -f *.txt ] ,

  • Если такого файла не существует,
    • если опция оболочки nullglob не включена (по умолчанию), слово *.txt остается нерасширенным, а -f оценивается как ложное.
    • если включена опция оболочки nullglob , слово *.txt удаляется, оставляя [ -f ] , что эквивалентно test -f . Поскольку указан только 1 аргумент, правило состоит в том, что выражение является истинным тогда и только тогда, когда аргумент не равен нулю. -f не равно нулю, поэтому выражение верно.
  • Если такие файлы существуют, *.txt раскрывается в список их имен.
    • Если существует только один такой файл, -f видит имя файла и принимает значение true.
    • Если существует два таких файла, ожидается, что третий аргумент будет двоичным оператором (-a или -o), и вы, вероятно, получите ошибку binary operator expected .
    • Если существует три или более таких файлов, вы получаете ошибку too many arguments .

Чтобы проверить, существуют ли файлы, соответствующие шаблону, посмотрите эту ветку.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .