所以我正在尝试创建一个函数来检查文件是否已使用此函数进行了修改:
位于functions.zsh
:
changed() {
echo "$1"
if [ -f "$1_changed" ]; then
if [ stat -f "%Z" != $(<"$_changed") ]; then
return 1
else
return 0
fi
else
stat -f "%Z" "$1" > "$1_changed"
return 1
fi
}
当前的用例是这样的:
位于load_plugins.sh
:
if [ changed("plugins") -eq 1]; then
echo "plugin file updated, installing plugins"
antibody bundle < "$plugin_file" > "$installed_plugins"
if [[ $OSTYPE == *darwin* ]];then
antibody bundle robbyrussell/oh-my-zsh folder: lib/clipboard >> "$installed_plugins"
fi
fi
两者的来源都是这样的:
位于~/.zshrc
base_path="$HOME/.zsh"
config_path="$base_path/config"
source "$custom_path/functions.zsh"
source "$config_path/load_plugins.zsh" "$config_path"
问题是我收到此错误:
load_plugins.zsh:7: number expected
这是这一行:
if [ changed("plugins") -eq 1]; then
我还注意到,如果我放置:
echo changed("plugins")
前:
if [ changed("plugins") -eq 1]; then
没有任何东西打印到终端上,与我放置echo
在changed()
其中检查功能是否正常工作的内容相同。
我究竟做错了什么?
编辑:
到目前为止我所做的更改:
changed() {
echo "$1"
if [ -f "$1_changed" ]; then
if [ "$(stat -f \"%Z\")" != "$(<"$1_changed")" ]; then
return 1
else
return 0
fi
else
"$(stat -f "%Z" "$1")" > "$1_changed"
return 1
fi
}
完成的工作版本
changed () {
local timestamp="$(stat -f %Z "$1")"
if [ ! -f "$1_changed" ] || [ "$timestamp" != "$(<"$1_changed")" ]; then
current="$(<"$1_changed")"
printf '%s\n' "$timestamp" >"$1_changed"
fi
[ "$timestamp" != "${current:-$(<"$1_changed")}" ]
}
您更新的函数,在调用中带有更正
stat
的引号(引号将被输出,并且后来针对文件内容的测试总是会因为它们而失败):这可以显着缩短为:
在这里,我还将一个命令替换转换为直接调用 to的输出,重定向到输出文件(参见第一段代码中的注释)。
stat
stat
error here
我还更改了函数的逻辑,因此不需要太多
return
调用。如果没有return
,则函数的退出状态将是函数中最后一条语句的退出状态。我们可以让这个稍微整洁一点
稍后,您可以使用
请注意,您的电话,
有几个语法错误。
消除四个错误
哪个是:
$(...)
stat -f
为-c
选项$1
为stat
(稍后在下游也添加一个文件名( ))$1
屈服