我正在编写一个简单的Bash脚本来检测文件夹何时被修改.
它非常接近:
ls -lR $dir > a
ls -lR $dir > b
DIFF=$(diff a b)
if [ $DIFF -ne 0 ]
then
echo "The directory was modified"
Run Code Online (Sandbox Code Playgroud)
不幸的是,if语句输出错误:[: - ne:一元运算符是预期的
我不确定我的剧本有什么问题,请有人帮助我吗?
非常感谢你!
Jary
Pau*_*lin 49
if ! diff -q a b &>/dev/null; then
>&2 echo "different"
fi
Run Code Online (Sandbox Code Playgroud)
Lou*_*nco 45
ls -lR $dir > a
ls -lR $dir > b
DIFF=$(diff a b)
if [ "$DIFF" != "" ]
then
echo "The directory was modified"
fi
Run Code Online (Sandbox Code Playgroud)
tan*_*ens 27
您正在寻找示例代码中的返回值,diff
而不是diff
您正在使用的输出.
试试这个:
diff a b
if [ $? -ne 0 ]; then
echo "The directory was modified";
fi
Run Code Online (Sandbox Code Playgroud)
如果您不需要知道更改是什么,cmp
就足够了。另外,您可以使用&&
and提供的语法技巧||
:
cmp a b || echo 'The directory was modified'
Run Code Online (Sandbox Code Playgroud)
该指令可以解释为:“要么 a 和 b 相等,要么我回显消息”。
(语义的&&
和||
必须小心处理,但在这里它的直观)。
只是为了可读性,我实际上更喜欢把它放在两行:
cmp a b \
|| echo 'The directory was modified'
Run Code Online (Sandbox Code Playgroud)