脚本本身相当清晰易懂。这个脚本还能进一步改进吗?
第一个版本是在 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
答案1
这看起来将被关闭,不知道为什么,可能是因为这是超级用户的编程问题。
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
将这两个代码片段合并到脚本中可以完成脚本所做的所有操作。
答案2
在[ -f *.txt ]
,
- 如果不存在这样的文件,
- 如果未启用 shell 选项
nullglob
(默认),则单词*.txt
将保持未扩展状态,并且-f
计算结果为 false。 - 如果启用了 shell 选项,则会删除
nullglob
单词,留下,这相当于。由于只给出了 1 个参数,因此规则是当且仅当参数不为空时,表达式才为真。不为空,因此表达式为真。*.txt
[ -f ]
test -f
-f
- 如果未启用 shell 选项
- 如果存在这样的文件,
*.txt
则扩展为其名称的列表。- 如果只存在一个这样的文件,则
-f
查看文件名并计算为真。 - 如果存在两个这样的文件,则第三个参数应为二元运算符(
-a
或-o
),并且可能会出现binary operator expected
错误。 - 如果存在三个或更多这样的文件,则会收到
too many arguments
错误。
- 如果只存在一个这样的文件,则
要测试与模式匹配的文件是否存在,请参阅此主题。