我有一个shell脚本,可以在两个目录中比较同名文件,并提醒我注意差异。大多数情况下,新批处理中的文件文件不变,但偶尔会有一个更改,我需要采取一些措施。我试图更新我的脚本以忽略我不关心的细微差别,特别是Amazon S3 URL中的Expiration和Signature标记。
我当前的脚本使用cmp来完全比较文件:
if ! cmp --silent ${i} ${COMPARE_DIR}/${i}; then
echo "$i : TAKE ACTION"
fi
我在命令行上相当快地计算出一种使用sed重新编写有问题的模式的方法:
cmp <(sed -e "s/Expires.*3D/Expires3D/" file1.json) <(sed -e "s/Expires.*3D/Expires3D/" ../other/file1.json)
对于我的生活,我无法弄清楚在我的脚本中使其工作的语法。首先,它抱怨括号,在逃避之后我得到了一个非常有帮助的No such file or directory
错误。我没有尝试过改善的事情。
有什么建议吗?有没有更好的方法来达到我想要的目标?
答案 0 :(得分:1)
假设行cmp <(sed -e "s/Expires.*3D/Expires3D/" file1.json) <(sed -e "s/Expires.*3D/Expires3D/" ../other/file1.json)
正常工作,您可以按如下方式检查结果:
cmp <(sed -e "s/Expires.*3D/Expires3D/" file1.json) <(sed -e "s/Expires.*3D/Expires3D/" ../other/file1.json)
if [ "$?" -ne "0" ] ; then
echo "$i : TAKE ACTION"
fi
答案 1 :(得分:1)
首先它抱怨括号,在逃避之后我得到了一个非常有帮助的没有这样的文件或目录错误。
很可能你的脚本是以Bash身份运行的。确保第一行是#!/bin/bash
(或者在系统中有Bash的地方)。
这是因为<(...)
是特定于Bash的,/bin/sh
或其链接的任何内容可能都不受支持。
例如,如果您的脚本的第一行是#!/bin/sh
,那么您将收到如下错误:
script.sh:第3行:意外令牌附近的语法错误`(&#39;
然后,就像你说的那样,你&#34;转义了括号&#34;,就像<\(sed -e ...\)
一样,shell会将其解释为来自文件的输入重定向,并且因为你没有这样做文件(名为&#34;(sed&#34;)的文件,No such file or directory
错误完全符合预期。
答案 2 :(得分:0)
如果您的操作可以作为单个命令或函数调用编写,则可以使用<? if($_SESSION["LogedInAdminId"] && $_SESSION['AdminStatus']=="M") { ?>
和<? if($_SESSION["LogedInAdminId"] && $_SESSION['AdminStatus']=="M" || "A") { ?>
运算符替换&&
和||
以获得非常混乱单行:
if-then